android---360等杀掉了app的主进程后 ,如何自动开启 如何防止被kill

如何阻止360等进程查杀工具停止App后台进程
安全软件优化内存时需要关闭没用的进程
既然你同意使用360,,也允许了360的最高权限。。那么他就有足够的权限来杀掉app后台进程。

 

一 如何保证app进程不被杀掉(可以研究一下 守护进程 和 AIDL )


1 如果将服务放在系统主进程中就应该不会被杀掉?system/app
2 守护进程
相互监听,如果有一方被kill掉,另一个捕获到立即启动,以达到service永远都在运行的状态
例如:微信是同时开启了两个进程和服务


拥有service的进程具有较高的优先级
官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连
接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。

3 onDestroy方法里重启service
service +broadcast 方式,就是当service走ondestory的时候,发送一个自定义的广播,当收到广播的时候,重新启
动service;

 

二 保持service存活的方法?
1 onStartCommand方法,返回START_STICKY---------------
StartCommond几个常量参数简介:
1、START_STICKY
在运行onStartCommand后service进程被kill后,那将保留在开始状态,但是不保留那些传入的intent。不久后service就
会再次尝试重新创建,因为保留在开始状态,在创建 service后将保证调用onstartCommand。如果没有传递任何开始
命令给service,那将获取到null的intent。
【结论】 手动返回START_STICKY,亲测当service因内存不足被kill,当内存又有的时候,service又被重新创建,比较
不错,但是不能保证任何情况下都被重建,比如进程被干掉了


2 提升service优先级

在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000
是最高值,如果数字越小则优先级越低,同时适用于广播。
【结论】目前看来,priority这个属性貌似只适用于broadcast,对于Service来说可能无效


3 提升service进程优先级
Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收
当service运行在低内存的环境时,将会kill掉一些存在的进程。因此进程的优先级将会很重要,可以使用
startForeground 将service放到前台状态。这样在低内存时被kill的几率会低一些。

 

4 Application加上Persistent属性
看Android的文档知道,当进程长期不活动,或系统需要资源时,会自动清理门户,杀死一些Service,和不可见的
Activity等所在的进程。但是如果某个进程不想被杀死(如数据缓存进程,或状态监控进程,或远程服务进程)

 

5 监听系统广播判断Service状态
通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存
活,别忘记加权限啊。


6 将APK安装到/system/app,变身系统级应用
需要系统root过

 

 

相关url:http://blog.csdn.net/mad1989/article/details/22492519

posted @ 2015-08-10 08:46  JavAndroidJSql  阅读(1886)  评论(0编辑  收藏  举报