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是否在后台运行,比 ...
随机推荐
- SSIS 初次接触 + 开发记录
第一次接触SSIS,昨天终于把一套流程走通,记一下流水. 1:安装 使用SSIS需要安装插件(VS 和Sql Server都需要另外安装). 自己使用的vs2017开发,官网有专门的 VS2017 安 ...
- TCP/IP网络知识
1.TCP/IP概念 TCP/IP不是单指一种传输协议,而是一组传输控制协议/互联网协议. 2.TCP/IP分层 (计算机网络中,实际应用的网络协议是TCP/IP协议族,TCP/IP的应用层大体上对应 ...
- innodb存储引擎之内存
1.innoDB存储引擎体系架构 如上图所示,innoDB存储是基于磁盘存储的,并且其中的记录以页的方式进行管理,但为什么要引入一个内存池呢? 其目的就是为了协调CUP速度与磁盘速度的鸿沟,基于磁盘的 ...
- Windows 7上QTP11破解及java等插件破解方法
QTP11破解方法: 1.准备文件 注册机mgn-mqt82.exe 2.安装QTP11 3.运行注册机mgn-mqt82.exe 如果运行mgn-mqt82.exe 没有反应-,请注意关掉暂时关掉杀 ...
- Raspberrypi 安装完MySQL之后登录不了(ERROR 1698 (28000))
1.问题原因: 出现这是错误是因为 mysql 默认的 root 用户使用了 UNIX auth_socket_plugin 的用户认证方式,我们有下面两种方式处理问题: 修改 root 用户认证方式 ...
- Oracle【三表的联合查询】
,'北京','彰显大气'); ,'上海','繁华都市'); ,'广州','凸显舒适'); ,'深圳','年轻气氛'); ,'北上广深','不相信眼泪'); commit; ; ; ; ; ; 员工信息 ...
- Capture 设置pin name 不可见
在器件库文件页面空白处双击,自动弹出OPTIONS对话框,再设计PIN NAME 可见属性为FLASE. 双击管脚.不管用,改不了.
- Centos下编译安装nginx
1.安装依赖 yum install -y pcre-devel zlib-devel gcc openssl-devel gd-devel 2.下载安装包 不同版本的nginx下载地址:http:/ ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- System.nanoTime与System.currentTimeMillis
System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期.(系统计时器的当前值,以毫微秒为单位) System.currentTimeMillis返回的是从1970.1.1 UTC ...