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的更多相关文章

  1. Android -- ActivityLifeCycleCallbacks

    ActivityLifeCycleCallbacks Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理. 为什么用ActivityLifec ...

  2. 转:Android -- ActivityLifeCycleCallbacks

    http://www.cnblogs.com/yydcdut/p/4945990.html 一个不常见类的使用,名字叫ActivityLifeCycleCallbacks 通常一个项目中有很多个act ...

  3. Android开发 - ActivityLifecycleCallbacks用法初探

    ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用Activity ...

  4. ActivityLifecycleCallbacks 的简单使用

    转载自 http://blog.csdn.net/tongcpp/article/details/40344871 ActivityLifecycleCallbacks是什么? Application ...

  5. 记录Activity启动时间 ActivityLifecycleCallbacks

    ActivityStackManager 定义一个集合(Stack)保存所有还未销毁的 Activity public class ActivityStackManager { private Sta ...

  6. ActivityLifecycleCallbacks 如何控制activity的生命周期

    Android开发 - ActivityLifecycleCallbacks使用方法初探 初识 ActivityLifecycleCallbacks 利用ActivityLifecycleCallba ...

  7. Android使用ActivityLifecycleCallbacks管理Activity和区分App前后台

    一.ActivityLifecycleCallbacks接口介绍 官方地址:https://developer.android.com/reference/android/app/Applicatio ...

  8. css图片精灵

    <ul> <li class="top"> <em>01</em> <p><a href="http:/ ...

  9. 判断App运行是否在前台

    转自:http://notes.stay4it.com/2016/02/26/check-if-app-is-running-forground/ 在一些场景中,经常会需要判断App是否在后台运行,比 ...

随机推荐

  1. UEFI笔记 --- PeiReadOnlyVariable2->GetVariable()

    问:在PEI阶段,PeiReadOnlyVariable2->GetVariable()可以从Pei Hob或NV RAM中获取UEFI变量,例如Setup默认值.若平台首次烧录BIOS并开机, ...

  2. maven入门-- part1 简介

    Maven是什么 maven是基于项目对象模型(pom:project object model),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具.对依赖关系的特性进行细致的分析和划 ...

  3. Delphi ADO组件

    樊伟胜

  4. Binlog_master

    二进制日志 记录导致数据改变或潜在导致数据改变的SQL语句 记录已提交的日志 不依赖于存储引擎类型 功能:通过"重放"日志文件中的事件来生成数据副本 注意:建议二进制日志和数据文件 ...

  5. 在MDK 中忽略(suppress) 某一个警告

    文章转载自:http://www.51hei.com/bbs/dpj-29515-1.html 有时候我们需要在MDK中忽略掉某一个具体的warnning,怎么做呢? 只需在Misc Control中 ...

  6. JMeter 控件整理

    一个线程组里多个请求的情况下,添加用户参数.如添加random函数,若不勾选“每次迭代更新一次”则每发送一个请求调用一次random函数,勾选上之后,整个线程组运行过程只调用一次random函数.

  7. (转) Oracle性能优化-读懂执行计划

    Oracle的执行计划 得到执行计划的方式 Autotrace例子 使用Explain explain plan set STATEMENT_ID='testplan'for select * fro ...

  8. 第七章 路由 82 名称案例-使用keyup事件实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  9. 解决Windows jmeter Non HTTP response message: Address already in use: connect 错误(转载)

    jMeter报错: Response code: Non HTTP response code: java.net.BindExceptionResponse message: Non HTTP re ...

  10. ios 打包 异常

    1. 问题:Xcode9升级到Xcode10后运行App报错: 2. 原因分析: Xcode10中libstdc++.6.0.9和libstdc++被移除,Frameworks中libstdc++.6 ...