您的位置:首页 > 移动开发 > Android开发

安卓回调函数解决不同类之间函数调用和数据通信的问题

2017-05-11 14:23 405 查看
欢迎转载,请注明转载自安卓订阅号(安卓编程入门进阶)。

百度云原清晰度地址:http://pan.baidu.com/s/1mhS0H8O 

安卓回调函数的意义:

安卓中其实随处可见回调函数,用户在手机上执行的大部分操作都会产生一个回调事件,例如Button点击,listView的点击等。这些控件的回调函数都已经在安卓系统中内置写好,程序员使用上面的成熟控件只需要编写回调函数部分,即回调事件实际执行的部分。但是编写安卓程序不可避免的需要一些线程之类的特性。如上一节课程,如果线程是直接在MainActivity中初始化的,那么可以使用handler将数据传递到UI进程,但很明显,随着程序的功能增多,把所有的线程全部定义到MainActivity中很不现实。如果新建一个线程类,就需要解决线程类把结果实时通知到主线程并刷新UI的问题,安卓的回调机制就可以很好的解决此问题。回调的解释网上很多(如http://blog.csdn.net/wojiaotianyong/article/details/70948632),也有很多例程,本课程通过实际操作演示回调函数定义和创建的过程,程序通过创建子线程类,在子线程中每一秒读取一次系统时间,然后通过回调函数将数据传递到MainActivity中。

注意:虽然回调函数的函数体是在MainActivity.java中,但是这部分函数的执行还是属于子线程,如果要使用此数据刷新UI线程,还是需要使用handler(参见上一节课程)。

1、  创建一个空的工程,名为LearnCallback。

2、  在xml界面上添加一个button控件ID=btnStart用于启动子线程,再添加一个TextView控件ID=tvOut用于显示每秒产生的日期和时间输出。

3、  在MainActivity.java中为两个xml控件添加初始化。并设置button的监听事件。

4、  在包名上右键新建一个新的接口命名为CallBackMain,在类中添加一个CallbacktoMain方法参数为字符串类型用于传递字符串,结束。



5、在包名上右键新建一个新的类命名为B,继承自Thread类。声明一个CallBackMain对象,在类中添加一个SetCallback函数,参数为CallBackMain对象,函数体中将线程类中的CallBackMain对象指向传进来的参数。



6、在子线程中重写run方法,在run方法中初始化日期和时间格式,每秒钟获取一次日期字符串,然后调用线程类中CallBackMain对象的CallBackMain方法,将日期作为参数传递到MainActivity。



7、在MainActivity声明B类的对象,然后调用B的SetCallBack方法,参数中直接初始化CallBackMain对象,重写CallBacktoMain方法。



8、MainActivity中生命一个handler对象,重写handleMessage方法,在CallBacktoMain的回调函数中初始化bundle对象,将回调函数的参数写入bundle,初始化一个message对象,将bundle装入msg中,使用handler的sendMessage方法送到主线程,在handleMessage中使用TextView控件显示最新的日期。



                                                   更多最新安卓编程资料请关注微信公众号:安卓编程入门进阶
                                           


     
                                            




                                                   更多最新安卓编程资料请关注微信公众号:安卓编程入门进阶
                                           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐