android Process.killProcess 和 System.exit(0) 區別

來源:互聯網
上載者:User

標籤:

原文:http://www.cnblogs.com/lesliefang/p/3933640.html

 

1 Process.killProcess  和 System.exit(0) 兩個都會 kill 掉當前進程。

你可以開啟 DDMS 查看進程號,或 adb shell 進入 shell 然後 ps 一下,進程確實被 kill 掉了。

2 如果是在第一個 Activity 調用 Process.killProcess 或 System.exit(0) 都會 kill 掉當前進程。

但是如果不是在第一個 Activity 中調用,如 ActivityA 啟動 ActivityB ,你在 ActivityB 中調用

Process.killProcess 或 System.exit(0) 當前進程確實也被 kill 掉了,但 app 會重新啟動,

又建立了一個新的進程。(這是我同事發現的)

這點還不是很明白,我估計 android os 認為 app 是被意外終止的(如記憶體不足),os 底層有監聽服務,

app 被意外終止會自動重啟。

3 在測試極光推送的時候,發現退出 app 後就收不到推送了。後來發現是調用了 System.exit(0) 的原因。

首先 service 也是在進程中的,在主線程中,所以 service 中如果有耗時操作也要開啟另外的線程來處理。

當調用 System.exit(0) 或 Process.killProcess 的時候進程被 kill 掉了,進程裡的所有東西當然包括 service 肯定

也沒了。由於極光推送 pushservice 被 kill 掉了,所以退出 app 後就收不到推送了。

4 還沒完,戲劇性的事情發生了,剛退出 app 由於 kill 掉了進程,服務沒了,所以收不到推送。但是過了大約1分鐘左右居然又能推過來了。

原來是和 service 的 onStartCommand 的傳回值有關

@Override    public int onStartCommand(Intent intent, int flags, int startId) {        Log.i("lelsie", "service onStartCommand");        return START_STICKY;        //return START_NOT_STICKY;    }

如果返回 START_STICKY 是說服務應該一直運行除非我們手動停止它。極光 pushservice 返回的肯定是 START_STICKY。

所以1分鐘之內系統又重啟了服務,當然會先為 app 建立一個新的進程,也就是重啟了 app, 同樣你可以在 DDMM 中查看進程的殺死與新進程的重建。

我在手機上截了 2 張圖

            

第一個圖是在調用了 Process.killProcess 或 System.exit(0) 之後的圖,可以看到進程已不存在了,服務當然也不在了。顯示正在重新啟動。

第二個圖是服務重啟以後的正常狀態,所以 1-2分鐘後又能接收到推送了。

第三個圖是 DDMS

5 其實 Process.killProcess 或 System.exit(0) 都不應該直接調用, 進程是由 os 底層進行管理的,android 系統會自己進行處理回收進程。

退出應用你就直接  finish 掉 activity 就行了。

 

正常情況下 back 鍵退出應用以後 os 就會回收 app 進程, 但當 app 中有推送服務等需要長時間啟動並執行服務時  os  就不會 kill 掉進程,也就是說應用將一直線上。 即使你手動  kill 掉進程, 進程也會自動重啟。

 

本人水平有限,有問題大家再多討論。。。。

android Process.killProcess 和 System.exit(0) 區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.