當系統的記憶體不足時, android系統將根據程序優先順序選擇殺死一些不太重要的程序. 程序優先順序從高到低分別為:
1. 前臺程序. 以下的程序為前臺程序:
a. 程序中包含處於前臺的正與使用者互動的activity;
b. 程序中包含與前臺activity繫結的service;
c. 程序中包含呼叫了startForeground()方法的service;
d. 程序中包含正在執行onCreate(), onStart(), 或onDestroy()方法的service;
e. 程序中包含正在執行onReceive()方法的BroadcastReceiver.
系統中前臺程序的數量很少, 前臺程序幾乎不會被殺死. 只有當記憶體低到無法保證所有的前臺程序同時執行時才會選擇殺死某個前臺程序.
2. 可視程序. 以下程序為可視程序:
a. 程序中包含未處於前臺但仍然可見的activity(呼叫了activity的onPause()方法, 但沒有呼叫onStop()方法). 典型的情況是執行activity時彈出對話方塊, 此時的activity雖然不是前臺activity, 但其仍然可見.
b. 程序中包含與可見activity繫結的service.
可視程序不會被系統殺死, 除非為了保證前臺程序的執行而不得已為之.
3. 服務程序. 程序中包含已啟動的service.
4. 後臺程序. 程序中包含不可見的activity(onStop()方法呼叫後的activity). 後臺程序不會直接影響使用者體驗, 為了保證前臺程序/可視程序/服務程序的執行, 系統隨時都有可能殺死一個後臺程序. 一個正確的實現了生命週期方法的activity處於後臺時被系統殺死, 可以在使用者重新啟動它時恢復之前的執行狀態.
5. 空程序. 不包含任何處於活動狀態的程序是一個空程序. 系統經常殺死空程序, 這不會造成任何影響. 空程序存在的唯一理由是為了快取一些啟動資料, 以便下次可以更快的啟動.
所以,據上所述,對應解決方法如下:
1、提高程序優先順序
startForeground(1, new Notification());
2、找到這個程序對應的 AndroidMannifest.xml 檔案,在其中新增屬性android:persistent="true" ,這樣可以將該程序設定為常駐記憶體程序,就可以降低被Kill的機率。
當系統的記憶體不足時, android系統將根據程序優先順序選擇殺死一些不太重要的程序. 程序優先順序從高到低分別為:
1. 前臺程序. 以下的程序為前臺程序:
a. 程序中包含處於前臺的正與使用者互動的activity;
b. 程序中包含與前臺activity繫結的service;
c. 程序中包含呼叫了startForeground()方法的service;
d. 程序中包含正在執行onCreate(), onStart(), 或onDestroy()方法的service;
e. 程序中包含正在執行onReceive()方法的BroadcastReceiver.
系統中前臺程序的數量很少, 前臺程序幾乎不會被殺死. 只有當記憶體低到無法保證所有的前臺程序同時執行時才會選擇殺死某個前臺程序.
2. 可視程序. 以下程序為可視程序:
a. 程序中包含未處於前臺但仍然可見的activity(呼叫了activity的onPause()方法, 但沒有呼叫onStop()方法). 典型的情況是執行activity時彈出對話方塊, 此時的activity雖然不是前臺activity, 但其仍然可見.
b. 程序中包含與可見activity繫結的service.
可視程序不會被系統殺死, 除非為了保證前臺程序的執行而不得已為之.
3. 服務程序. 程序中包含已啟動的service.
4. 後臺程序. 程序中包含不可見的activity(onStop()方法呼叫後的activity). 後臺程序不會直接影響使用者體驗, 為了保證前臺程序/可視程序/服務程序的執行, 系統隨時都有可能殺死一個後臺程序. 一個正確的實現了生命週期方法的activity處於後臺時被系統殺死, 可以在使用者重新啟動它時恢復之前的執行狀態.
5. 空程序. 不包含任何處於活動狀態的程序是一個空程序. 系統經常殺死空程序, 這不會造成任何影響. 空程序存在的唯一理由是為了快取一些啟動資料, 以便下次可以更快的啟動.
所以,據上所述,對應解決方法如下:
1、提高程序優先順序
startForeground(1, new Notification());
2、找到這個程序對應的 AndroidMannifest.xml 檔案,在其中新增屬性android:persistent="true" ,這樣可以將該程序設定為常駐記憶體程序,就可以降低被Kill的機率。