android监听程序被杀死,Android 监听主进程被杀
当按多任务键时,然后清除所有程序或者杀死单个程序时,如果要监听这个动作的话,可以在一个service里监听。
效果如下:
可以看到,在多任务窗口中,左滑结束进程和清除所有进程后,都会自己再打开应用,代码如下:
public class KeepLifeService extends Service {
private static final String TAG="KeepLifeService";
private String mPackName;
private ActivityManager mActivityManager;
@Override
public void onCreate() {
super.onCreate();
mActivityManager =(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
String process=getProcessName();
mPackName =getPackageName();
boolean isRun=isRunningProcess(mActivityManager,mPackName);
Log.i(TAG, String.format("onCreate: %s %s pid=%d uid=%d isRun=%s", mPackName,process, Process.myPid(), Process.myUid(),isRun));
if(!isRun){
Intent intent = getPackageManager().getLaunchIntentForPackage(mPackName);
if(intent!=null){
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* 获取当前进程名称
*
* @return
*/
public static String getProcessName() {
try {
File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline");
BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
String processName = mBufferedReader.readLine().trim();
mBufferedReader.close();
return processName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 进程是否存活
* @return
*/
public static boolean isRunningProcess(ActivityManager manager,String processName) {
if(manager==null)
return false;
Listrunnings = manager.getRunningAppProcesses();
if (runnings != null) {
for (ActivityManager.RunningAppProcessInfo info : runnings) {
if(TextUtils.equals(info.processName,processName)){
return true;
}
}
}
return false;
}
}
AndroidManifest.xml 文件中
启动service
startService(new Intent(this,KeepLifeService.class));
在主进程中启动service ,然后杀死主进程,这时service会自动重新启动,onCreate 会重走,pid会不一样,所以要监听主进程被杀,只需要在service 中的oncreate 判断主进程是否存活,不存活则为被杀,这时你可以重新启动应用或者别的。(这里为了演示,选择了重新启动应用,也算是保活手段,不过这种行为不好,别当流氓软件)
关键点:
其中启动service只能用startService ,不能用bindService,
mainifest 中service 要放单独进程,或者子进程。
如果想要保活的话?
这个只适用于 在多任务 页杀死进程,如果用
am force-stop packageName
杀进程的话,是不会重启service 的。
然后是应用自己崩溃,异常,这个可以用
Thread.setDefaultUncaughtExceptionHandler
监听,然后重启应用,但是如果是 so 包,也就是c 层崩溃,是监听不到异常的,这时可以用上面那个service 开线程,每30s 检查一次主进程是否存活,然后再启动之类。
本次测试Android 版本: 5.1~7.1.1,其它的自测,有效果的话可以评论留言。
android监听程序被杀死,Android 监听主进程被杀相关推荐
- oracle11g监听程序启动,Oracle11g无监听程序解决办法
Oracle11g无监听程序解决办法 一.监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求.既然是基于服务器端的服务,那么它 ...
- 链接oracle 无监听程序,连接ORACLE 无监听程序
首先检查 计算机管理 -> 服务 -> OracleOraDa10g_home1TNSListener 是否启动,最好重启试试. 再检查其他服务是否正常.如果没有问题还是无法连接. 在 ...
- android 编程一个程序实现方法,Android中一个应用实现多个图标的几种方式
前言 最近因为新需求需要,我的应用将有多个ICON入口..最终选择了 activity-alias,其实实现多图标有好几种方式,下面就给大家总结下,分享出来供大家参考学习: 1. 多Activity ...
- android系统应用程序设置时间,Android应用程序设置系统时间的方法
Android应用程序获取系统时间的方法: System.currentTimeMillis(); Android SDK虽然提供了设置系统时间的方法SystemClock.setCurrentTim ...
- android中应用程序生命周期,Android应用程序生命周期中的活动和图标
面向大众的移动技术,第3部分 为您的Android移动应用程序添加导航样式 安德鲁·格洛弗 2013年7月25日发布 面向大众的移动技术 请期待本系列的后续内容. 请期待本系列的后续内容. 近年来,移 ...
- eclipse android 第一个程序,Eclipse 开发 Android,第一个 HelloWord 程序(学习1)-Fun言
名词解释: SDK:Software Development Kit AVD:Android Virtual Devices ADT:Android Development Tools 1. Inst ...
- android 分享小程序到微信,Android 分享微信小程序之图片优化
小菜上周接入了微信分享小程序的入口,基本功能实现都没问题,有需要的朋友可以了解一下 Android 分享微信小程序失败二三事,虽然功能都正常,但整体测试发现图片展示效果不佳.于是小菜整理了一个简单的小 ...
- android 清除应用程序数据,清除Android应用程序用户数据
fantouch.. 5 该命令pm clear com.android.browser需要root权限. 所以,先跑su. 以下是示例代码: private static final String ...
- android开发的程序闪退,Android软件闪退
初学Android开发,这段代码在模拟器上会闪退,不知是哪里有问题,求大神解答 package com.kongcheng.light; import androidx.appcompat.app.A ...
最新文章
- Linux Terminal 控制终端的使用
- 前端服务器共享的文件产品内容,Skype for Business Server 2015-04-前端服务器-2-创建一个文件共享...
- RedHat Enterprise 5.1下OpenLDAP的配置及PAMNSS的配置
- [ACM_NYOJ_21]三个水杯(BFS广度优先搜索)
- Windows 10——连接鼠标时触摸板失效解决方案
- python中yield的用法详解——最简单,最清晰的解释(转载)
- RabbitMQ六种队列模式-工作队列模式
- kindeditor编辑器图片上传session丢失_微信公众号排版编辑器全指南!
- 有没有想过,你眼中的SQL进阶,别人看来连入门都不是?
- 解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错
- Illumina联手IBM Watson Health解读癌症基因谱
- opengl es3.0游戏开发学习笔记1-绘制旋转的三角形
- 移动云招聘,加入我们,搞点大事~
- spring框架特点
- 459-Linux基础(echo)
- 什么是USBHOST、USB Slave和USB OTG?它们之间有什么区别 USB、MiniUSB、MicroUSB
- 基因组Masked作用
- 计算机行为治疗模式,抑郁症的计算机化认知行为治疗(27页)-原创力文档
- 图森未来:营收增长与亏损扩大并行
- 初识flowable工作流-实现简单请假流程SpringBoot+VUE