ActivityLifecycleCallbacks的正确使用姿势
2016-09-26 11:18
274 查看
这是Android4.0之后的新Api,大多数人可能没有在意这一改动。但是对于一些框架的设计使用却有非常重要的意义的。
重点在于
每当来到Activity的生命周期回调的时候,Activity都会将事件分发到Application对应的方法,而Application则会调用我们实现的ActivityLifecycleCallbacks接口。这样使得我们可以在外部监听到每个Activity的生命周期。
这样的话,用处如下:
1.日志,保存记录Activity的活动,以及做一些测试。
2.框架设计中,如Http请求框架,需要提供在Activity被销毁时,cancel仍在队列中的请求。
3.框架使用中,如EventBus,Xutils等IOC框架,需要在OnCreate和OnDestory中注册和卸载的场景。可以使用ActivityLifecycleCallbacks避免显式在Activity中调用其Api。
至于在4.0以下获得相同效果,则需要代理系统框架中的Instrumentation类。
Object mainThread = KernelObject.declaredGet(application.getBaseContext(), "mMainThread");
Field instrumentationField = KernelReflect.declaredField(mainThread.getClass(), "mInstrumentation");
instrumentation = new MyInstrumentation();
KernelObject.copy(KernelReflect.get(mainThread, instrumentationField), instrumentation);
KernelReflect.set(mainThread, instrumentationField, instrumentation);
public interface ActivityLifecycleCallbacks { void onActivityCreated(Activity activity, Bundle savedInstanceState); void onActivityStarted(Activity activity); void onActivityResumed(Activity activity); void onActivityPaused(Activity activity); void onActivityStopped(Activity activity); void onActivitySaveInstanceState(Activity activity, Bundle outState); void onActivityDestroyed(Activity activity); }
重点在于
getApplication().dispatchActivityCreated(this, savedInstanceState);
每当来到Activity的生命周期回调的时候,Activity都会将事件分发到Application对应的方法,而Application则会调用我们实现的ActivityLifecycleCallbacks接口。这样使得我们可以在外部监听到每个Activity的生命周期。
这样的话,用处如下:
1.日志,保存记录Activity的活动,以及做一些测试。
2.框架设计中,如Http请求框架,需要提供在Activity被销毁时,cancel仍在队列中的请求。
3.框架使用中,如EventBus,Xutils等IOC框架,需要在OnCreate和OnDestory中注册和卸载的场景。可以使用ActivityLifecycleCallbacks避免显式在Activity中调用其Api。
至于在4.0以下获得相同效果,则需要代理系统框架中的Instrumentation类。
Object mainThread = KernelObject.declaredGet(application.getBaseContext(), "mMainThread");
Field instrumentationField = KernelReflect.declaredField(mainThread.getClass(), "mInstrumentation");
instrumentation = new MyInstrumentation();
KernelObject.copy(KernelReflect.get(mainThread, instrumentationField), instrumentation);
KernelReflect.set(mainThread, instrumentationField, instrumentation);
相关文章推荐
- bootstrap中的强调类
- h5输入框提示语 + 正常文本框提示语的实现方法
- web前端-HTML基础-001
- typer.js,可能是最小但功能也不多的模拟打字效果插件
- 用Javascript判断图片是否存在,不存在则显示默认图片
- JSON和GSON
- jQuery tagsinput在h5邮件客户端中应用详解
- 总结---JavaScript正则表达式
- 关于前端组件化开发的一点思考
- 总结---JavaScript基础DOM操作
- 总结---JavaScript函数基础总结
- Node.js stream模块
- 总结---JavaScript字符串函数
- 总结---JavaScript流程语句
- jquery中each循环常见问题
- 总结---JavaScript数组
- 总结---JavaScript运算符
- 全面理解Javascript中Function对象的属性和方法
- Thymeleaf教程 (十三) 附件:工具对象用法
- 总结---JavaScript的变量