1. 程式人生 > >android 程序防止被殺死

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後期升級應該會補上。畢竟這種技術,應該是流氓軟體最需要的東西