TheWatcher简介
主要针对Android各个界面中数据变化需要同步提供监听(Java项目通用)
用途类似EventBus,文章参照http://blog.csdn.net/harvic880925/article/details/40660137
只是TheWatcher仅仅提供了跨组件的数据改变监听回调,并没有EventBus所谓的:“EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。”
用法简介
首先在需要实现回调方法的类中实现TheChangedListener接口,然后调用TheWatcher类的register方法进行注册
public class MainActivity extends Activity implements TheChangedListener {
TextView tvHello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TheWatcher.register(this);
tvHello = $(R.id.am_tv_hello);
tvHello.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, TwoActivity.class));
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
TheWatcher.unregister(this);
}
public <T extends View> T $(int id) {
return (T) super.findViewById(id);
}
public <T extends View> T $(View view, int id) {
return (T) view.findViewById(id);
}
@Override
public void onWatcherChanged() {
tvHello.setText(TheWatcher.getString("test"));
}
}
注意在onDestory的时候调用unregister进行注销
然后在需要通知值改变的地方调用TheWatcher.putXXXX();方法
$(R.id.at_btn_notify).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TheWatcher.putString("test", "Welcome");
}
});
本来最开始是准备写得比较全能的,比如每个地方进行register的时候配置当前类只接收哪一些改变回调,但是后来想想实在没有必要,如果在register的地方进行配置,最终调用也会在最后的那个循环中来进行判断是否进行回调,现在这个样子回调所有的方法,也并不会对性能造成多大个影响,毕竟一个App中能够一起在前台进行操作的Activity、Service等基本上都不超过十个,需要回调数据保持一致的类就更少了。像EventBus那种想要替代Intent、Handle的我也没那个技术,也没有那个必要,明明有Intent和Handle了,手机本来就卡的话,你全部用C艹写它也会很卡。弱弱的说一句大神勿喷。