android中的事件处理(回调,监听)
来源:互联网 发布:java的环境变量配置 编辑:程序博客网 时间:2024/06/07 04:56
android中的事件处理机制有两种:
基于回调的事件处理机制与基于监听的事件处理机制。
基于回调的事件处理大多是在涉及到多线程时使用:
在类A中调用了一个耗时类B进行数据处理。但是,因为A无法得知B需要用多长时间才能将处理完数据,因而无法正确的接收B中返回的数据做后续处理。这时,回调的使用便可解决这一问题,对回调通俗的解释就是,在B中耗时操作结束后直接在B中调用A中的方法进行后续处理,而避免A中做迷茫的等待,或还没有得到数据就进行读取。
具体实现方法就是:在实例化B时,将A的实例传入B。然后在B中,当耗时操作结束后再利用A的实例调用A中的方法,即可:
版本1:
class A{ new B(A.this).exeute(); public void afterGetDataFromB(){ //Code do Something }}class B{ private A a; public B(A a){ this.a=a; } public Integer execute(){ // time consuming task Code a.afterGetDataFromB(); }}
这样便可实现基于回调的事件处理。
不过,这样有一个问题,就是,代码之间的耦合性较高,class B只能为A提供服务。倘若有其他类也需要class B 的话就会出现必须修改B的代码(使用重载的构造方法接收不同的服务对象,还要添加其他一些琐碎的代码才能实现),显然这种方式不够好,当有更多的类需要B提供服务时,就要不断的修改B中的代码。因此,为了更好的使用回调,避免以上情况,就是使用接口:
版本2:
在B中定义一个接口CallBack(),然后在任何需要使用B的类中实现这个接口,并在实例化B时,将自身实例传入即可:
class A implement CallBack{ new B(A.this).exeute(); @Override public void afterGetDataFromB(){ //Code do Something }}class B{ private CallBack callBack; public B(CallBack callBack){ this.callBack=callBack; } public Integer execute(){ // time consuming task Code callBack.afterGetDataFromB(); }/***定义一个接口*/ interface CallBack(){ public void afterGetDataFromB(); }}
图示:
但在实际使用中,使用接口时往往还有一种更简洁的方式,不用显示的使用接口。在使用时,不传入自身实例,而是直接实例化一个接口对象,以匿名内部类的形式使用接口,并在这个对象中实现接口中定义的方法:
版本3:
class A { new B(new CallBack(){ @Override public void afterGetDataFromB(){ //Code do Something } }).exeute();}class B{ private CallBack callBack; public B(CallBack callBack){ this.callBack=callBack; } public Integer execute(){ // time consuming task Code callBack.afterGetDataFromB(); }/***定义一个接口*/ interface CallBack(){ public void afterGetDataFromB(); }}
<完>
0 0
- android中的事件处理(回调,监听)
- Android中的事件处理总结-基于监听的事件处理
- Android中的事件处理总结-基于监听的事件处理
- Android中的事件处理总结-基于监听的事件处理
- Android 事件监听处理
- Android 事件监听处理
- Android中的事件监听
- Android开发中的UI事件监听处理机制总结
- Android开发中的UI事件监听处理机制总结 【转】
- Android开发中的UI事件监听处理机制总结
- android 监听事件的处理
- android 处理双击事件监听
- android 事件监听处理机制
- Android事件监听及处理
- Android事件处理之监听事件
- android事件监听和事件处理机制
- android的事件处理1(监听 回调 handle)
- 第一课:android的事件处理(基于监听)
- 过滤器、监听器、拦截器作用及配置
- C#使用VS 2010在程序加载时创建Access数据库和表
- C/C++不同文件夹下包含头文件的方法及#include的使用
- yii2 慢执行日志
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
- android中的事件处理(回调,监听)
- java串口通信API说明
- C++11多线程之std::unique_lock
- deepin搭建samba服务器
- textview 文字设置颜色及下划线
- UVA-455(Score)
- MyBatis基于Java API配置
- 解决SQLSEVER 存储过程入参不能带入in的参数传带逗号值的办法
- 2015年十大热门Android开源新项目