每个公司都想把自己的app时时刻刻运行在用户的手机上面,就算当用户点击清理应用时,也能够不被杀死。这种app有几个典型的,就是微信,QQ,支付宝这类的。
网络上面,很多人提出各种方法:
1.提升应用等级
2.重启应用
3.守护进程
……
实测,没有卵用,守护进程,会在杀死时,同时被杀死。
微信,QQ,这类是怎么实现的,为什么只有这几个特别有名的app才能够实现不被杀死的呢?如果是说是什么特殊的技术,那还有一些不是那么有名,但是也很有名的app,比如酷狗等等这类的,为什么,他们的app也会被杀死,难道这个技术有这么难?
所以,这里我产生个猜测,是不是不是app上面做手脚,而是腾讯,阿里和这些手机公司签订了某个合同,为了提升用户体验,系统而不杀死应用。
为了验证这个问题:
1.查找微信的app ID,在正在运行里面可以找到是:com.tencent.mm
2.创建一个新应用,manifest 设置成这个app ID
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tencent.mm"
android:versionCode="1"
android:versionName="1.0" >
3.创建2个服务,一个是Service1(正常服务),Service2(一个服务器进程,就是所谓的守护进程),里面什么都不做,
<service android:name="com.mt.mtcarptest.Service1"
></service>
<service android:name="com.mt.mtcarptest.Service2"
android:process=":remote"
></service>
4.在activity里面直接启动这2个服务:
private void startServices(){
Intent serviceOne = new Intent();
serviceOne.setClass(MainActivity.this, Service1.class);
startService(serviceOne);
Intent serviceTwo = new Intent();
serviceTwo.setClass(MainActivity.this, Service2.class);
startService(serviceTwo);
}
5.打开app后,使用小米的一键清理内存,清理完后,会发现,正在运行的进程里面,Service1会被杀死,但是马上能够自动重启,而Service2没有任何反应,也就是说,清理并不会对Service2产生任何影响
6.把app ID设置成一个普通的
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.asdfasdf.asdff"
android:versionCode="1"
android:versionName="1.0" >
7.然后再运行,一键清理,会发现,正在运行的进程里面,毛线都不会留下
由此证明:微信,QQ,支付宝这类的app不会被杀死并不是因为代码上面做了什么特殊处理,而是android系统识别到后,估计放水的。
在小米的系统上面,可以在安全中心把自己应用设置成允许自启动,这样也可以做到和微信QQ一样的效果,但是毕竟不是安装好APK就可以的,还需要用户手动去设置,一般来说,用户肯定不会去设置的(肯定是流氓软件)。呵呵
注:是否有别的方法可以真正意义上面解决这种问题?希望能一起讨论,但是就算能解决,也应该认为是一种系统bug吧,google后期升级应该会补上。毕竟这种技术,应该是流氓软件最需要的东西