java 监听器实现原理
2016-07-19 14:57
465 查看
监听器实现者:
public class MyActivity extends Activity implements InternetManager.Listener {
private TextView mText;
private InternetManager mInetMgr;
/* called just like onCreate at some point in time */
public void onStateChange(boolean state) {
if (state) {
mText.setText("on");
} else {
mText.setText("off");
}
}
public void onCreate() {
mInetMgr = new InternetManager();
mInetMgr.registerListener(this);
mInetMgr.doYourWork();
}
}
自定义类,监听器作为内部属性(包含方法),
类中存在调用监听器内部方法的地方,
set不同的监听器实现者,处理的方式便不一样,
监听器相当于一个钩子,做回调使用。
public class InternetManager {
// all the listener stuff below
public interface Listener {
public void onStateChange(boolean state);
}
private Listener mListener = null;
public void registerListener (Listener listener) {
mListener = listener;
}
// -----------------------------
// the part that this class does
private boolean isInternetOn = false;
public void doYourWork() {
// do things here
// at some point
isInternetOn = true;
// now notify if someone is interested.
if (mListener != null)
mListener.onStateChange(isInternetOn);
}
}
实例二:
public class MyActivity extends Activity implements InternetManager.Listener {
private TextView mText;
private InternetManager mInetMgr;
/* called just like onCreate at some point in time */
public void onStateChange(boolean state) {
if (state) {
mText.setText("on");
} else {
mText.setText("off");
}
}
public void onCreate() {
mInetMgr = new InternetManager();
mInetMgr.registerListener(this);
mInetMgr.doYourWork();
}
}
自定义类,监听器作为内部属性(包含方法),
类中存在调用监听器内部方法的地方,
set不同的监听器实现者,处理的方式便不一样,
监听器相当于一个钩子,做回调使用。
public class InternetManager {
// all the listener stuff below
public interface Listener {
public void onStateChange(boolean state);
}
private Listener mListener = null;
public void registerListener (Listener listener) {
mListener = listener;
}
// -----------------------------
// the part that this class does
private boolean isInternetOn = false;
public void doYourWork() {
// do things here
// at some point
isInternetOn = true;
// now notify if someone is interested.
if (mListener != null)
mListener.onStateChange(isInternetOn);
}
}
实例二:
@Override public void onStart(Intent intent, int startid) { super.onStart(intent, startid);
locationService = ((LocationApplication) getApplication()).locationService;
//获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的
locationService.registerListener(mListener);//注册监听
if (type == 0) { locationService.setLocationOption(locationService.getDefaultLocationClientOption()); } else if (type == 1) { locationService.setLocationOption(locationService.getOption()); }
}
@Override public void onDestroy() { Log.i("warn", "ondestroy"); locationService.stop(); //停止定位服务 locationService.unregisterListener(mListener); //注销掉监听 }
相关文章推荐
- spring boot 中使用定时器
- Spring中Quartz的配置
- Spring 注解的方式进行事务管理
- Java基础学习第二天
- Spring集成quartz任务调度框架
- Java 反射
- java文件读写操作大全
- Eclipse常用设置
- 用mvn test运行test case时,报“java.lang.OutOfMemoryError: PermGen space”
- Java动态代理(二)CGLIB动态代理应用
- springmvc3+hibernate3整合问题
- Java动态代理(一)动态类Proxy的使用
- Java逐行读写TXT文件
- Java基础知识二
- Java中equals和==的区别
- 在cmd里输入cd myclass 提示系统找不到指定路径
- java的Arrays类的应用
- Java专业术语集
- spring MVC mybatis ssm 框架 Jeeplus智能快速开发平台
- Java反射小结