ActivityLifecycleCallbacks
public class ActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks, ActivityState { private List<Activity> activityList=new ArrayList<>();
private List<Activity> resumeActivity=new ArrayList<>(); @Override
public int count() {
return activityList.size();
}
@Override
public boolean isFront() {
return resumeActivity.size() > 0;
}
@Override
public Activity current() {
return activityList.size()>0 ? activityList.get(0): null;
} @Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { activityList.add(0, activity);
}
@Override
public void onActivityStarted(Activity activity) {
} @Override
public void onActivityResumed(Activity activity) {
if (!resumeActivity.contains(activity)) {
resumeActivity.add(activity);
}
} @Override
public void onActivityPaused(Activity activity) {
} @Override
public void onActivityStopped(Activity activity) {
resumeActivity.remove(activity);
} @Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
} @Override
public void onActivityDestroyed(Activity activity) {
activityList.remove(activity);
} }
相应接口方法就可以看出对应功能。
使用方法:
在application中注册一个实例,所有activity接受生命周期管理,可以得到当前activity,activity task里activty数量等等。
public class MyApplication extends Application {
public ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks();
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(activityLifecycleCallbacks); }
解决以baseActivity来处理的一些功能。功能代码完成与Activity隔离。减少了耦合。
1.日志,保存记录Activity的活动,以及做一些测试。
2.框架设计中,如Http请求框架,需要提供在Activity被销毁时,cancel仍在队列中的请求。
3.框架使用中,如EventBus,Xutils等IOC框架,需要在OnCreate和OnDestory中注册和卸载的场景。可以使用ActivityLifecycleCallbacks避免显式在Activity中调用其Api。
4.重点:可以轻松管理应用前后台状态。比如按home键操作相关动作处理。
至于在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);
ActivityLifecycleCallbacks的更多相关文章
- Android -- ActivityLifeCycleCallbacks
ActivityLifeCycleCallbacks Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理. 为什么用ActivityLifec ...
- 转:Android -- ActivityLifeCycleCallbacks
http://www.cnblogs.com/yydcdut/p/4945990.html 一个不常见类的使用,名字叫ActivityLifeCycleCallbacks 通常一个项目中有很多个act ...
- Android开发 - ActivityLifecycleCallbacks用法初探
ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用Activity ...
- ActivityLifecycleCallbacks 的简单使用
转载自 http://blog.csdn.net/tongcpp/article/details/40344871 ActivityLifecycleCallbacks是什么? Application ...
- 记录Activity启动时间 ActivityLifecycleCallbacks
ActivityStackManager 定义一个集合(Stack)保存所有还未销毁的 Activity public class ActivityStackManager { private Sta ...
- ActivityLifecycleCallbacks 如何控制activity的生命周期
Android开发 - ActivityLifecycleCallbacks使用方法初探 初识 ActivityLifecycleCallbacks 利用ActivityLifecycleCallba ...
- Android使用ActivityLifecycleCallbacks管理Activity和区分App前后台
一.ActivityLifecycleCallbacks接口介绍 官方地址:https://developer.android.com/reference/android/app/Applicatio ...
- css图片精灵
<ul> <li class="top"> <em>01</em> <p><a href="http:/ ...
- 判断App运行是否在前台
转自:http://notes.stay4it.com/2016/02/26/check-if-app-is-running-forground/ 在一些场景中,经常会需要判断App是否在后台运行,比 ...
随机推荐
- C# Monitor Wait()和Pulse()
C# Monitor Wait()和Pulse() 1.Monitor.Wait方法当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有 ...
- ORA-01145: offline immediate disallowed unless media recovery enabled问题解决
ORA-01145: offline immediate disallowed unless media recovery enabled (随记,后续整理) 数据库只有在归档模式下才能够直接对数据文 ...
- 第八章· MySQL日志管理
一.MySQL日志简介  二.错误日志 1.作用: 记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志. 2.默认位置: $MYSQL_HOME/data/ 3.开 ...
- mybatis-04【小结】
mybatis-04[小结] 1.Mybatis 中 # 和 $ 的区别?#相当于对数据 加上 双引号,$相当于直接显示数据1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:o ...
- deep_learning_RNN序列模型
吴恩达<深度学习-序列模型>1 --循环序列模型:https://blog.csdn.net/weixin_41043240/article/details/79415134
- BLE 5协议栈-通用属性规范层(GATT)
文章转载自:http://www.sunyouqun.com/2017/04/page/2/ 通用属性规范GATT(Generic Attribute Profile)将ATT层定义的属性打包成不同的 ...
- mysql数据库:分表、多表关联、外键约束、级联操作
一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...
- 微信小程序开发(三)点击事件
接着上篇博客继续. 如下修改: // index.wxml <view>Hello World!</view> <button bindtap="but&quo ...
- win10电脑配置
微信 QQ 电脑管家 Chrome 坚果云 Sublime VLC 网易云音乐 Acrobat Reader DC PS git potplayer TeamViewer 有道云笔记/协作 百度网盘/ ...
- 如何在国内跑Kubernetes的minikube
跑minikube start老是被卡住,得到如以下的结果 minikube start --registry-mirror=https://registry.docker-cn.com miniku ...