android 程序防止被殺死
每個公司都想把自己的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後期升級應該會補上。畢竟這種技術,應該是流氓軟體最需要的東西