没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Android APP存活检测方式存活检测方式
主要介绍了Android APP存活检测方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
稍微深入了解过Android的开发者都知道,Android中每个APP的中的所有组件的生命周期状态都是由
ActivityManagerService(简称:AMS)进程来维护的,所以当某个APP被kill或意外crash时,AMS进程会第一时间维护APP的
组件。
我们今天不会看AMS进程维护APP的流程,只看AMS是通过什么手段第一时间得到的通知,我们是否能够将这种手段应用到
我们的APP中,在多进程环境下,通过这种手段进程间互相监控起到一个守护的作用。
我们知道一个APP对应唯一一个ActivityThread,这也是一个APP的真正的入口,当ActivityThread#main执行时,就会附着到
AMS进程,后续就由AMS进程维护APP的状态。那么关键点就在attach上。
见以下代码:ActivityManagerService#attachApplicationLocked()
private final boolean attachApplicationLocked(IApplicationThread thread,
int pid) {
...
final String processName = app.processName;
try {
AppDeathRecipient adr = new AppDeathRecipient(
app, pid, thread);
<span style="background-color: rgb(255, 255, 51);"><strong>thread.asBinder().linkToDeath(adr, 0);</strong></span>
app.deathRecipient = adr;
} catch (RemoteException e) {
app.resetPackageList(mProcessStats);
startProcessLocked(app, "link fail", processName);
return false;
}
...
return true;
}
上面被高亮显示的这行代码,就是关键点。 使用的是IBinder#linkToDeath来完成的。linkToDeath方法的第一个参数接收一个
android.os.IBinder.DeathRecipient的接口实现,用来接收app death的通知。
当然也可以通过IBinder#unlinkToDeath来取消监听。
感兴趣的同学,可以进入源码查看详细的注释,这里就不在贴注释。 源码中DeathRecipient的实现是AppDeathRecipient来完
成的, 这个处理中主要是AMS来清理当前APP进程对应的组件资源。
通过上面的了解,在我们的APP中要使用以上手段,多个进程之间要起到守护对方的作用,可能就需要得到对方的IBinder对
象。
获取获取IBinder对象的方法,参考如下:对象的方法,参考如下:
1.通过Context#bindService,在onServiceConnected上接收IBinder对象;
2.通过创建android.os.Messenger对象,然后通过intent将此对象传递给对方进程;
3.直接new Binder重写onTransact,然后通过intent将此Binder对象传递给对方进程;
以上这篇Android APP存活检测方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
资源评论
weixin_38546846
- 粉丝: 5
- 资源: 920
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功