1. 程式人生 > >Application生命週期(一)

Application生命週期(一)

1、Application是什麼?

Application和Activity,Service一樣,是android框架的一個系統元件,當android程式啟動時系統會建立一個application物件

用來儲存系統的一些資訊。通常我們是不需要指定一個Application的,這時系統會自動幫我們建立

如果需要建立自己 的Application也很簡單建立一個類繼承 Application並在manifest的application標籤中進行註冊

(只需要給Application標籤增加個name屬性把自己的 Application的名字定入即可)。

 

Android系統會為每個程式執行時建立一個Application類的物件且只建立一個、可以理解為單例模式的一個類。

它的生命週期是整個程式執行中最長的 因為它是全域性的單例,所以在不同的Activity和Service中獲取的都是一個物件。

一般會使用Application來進行一些資料傳遞,資料快取的操作。

2、Application生命週期

Application中包含了五個公開的方法
1)void  onConfigurationChanged(Configuration newConfig)
2)void  onCreate() 
3)void  onLowMemory()
4)void  onTerminate()

5)void onTrimMemory()

 

第一個是在配置被改變時觸發
第二個是在程式建立時建立
第三個記憶體不夠時觸發
第四個當終止程式時呼叫 但是不能保證一定呼叫
第五個是在記憶體清理時觸發

 

3、例項展示

 1 /**
 2  * @author ljcheng
 3  * @date 2019/6/29
 4  */
 5 public class MyApplication extends Application {
 6 
 7     private static String TAG = "MyApplication";
 8 
 9     @Override
10     public void onCreate() {
11         // 程式建立的時候執行
12         KLog.d(TAG, "onCreate");
13         super.onCreate();
14     }
15 
16     @Override
17     public void onTerminate() {
18         // 程式終止的時候執行
19         //當終止應用程式物件時呼叫,不保證一定被呼叫,當程式是被核心終止以便為其他應用程式釋放資源,那
20         //麼將不會提醒,並且不呼叫應用程式的物件的onTerminate方法而直接終止程序
21         KLog.d(TAG, "onTerminate");
22         super.onTerminate();
23     }
24 
25     @Override
26     public void onLowMemory() {
27         // 當後臺程式已經終止資源還匱乏時會呼叫這個方法。好的應用程式一般會在這個方法裡面釋放一些不必
28         // 要的資源來應付當後臺程式已經終止,前臺應用程式記憶體還不夠時的情況。
29         KLog.d(TAG, "onLowMemory");
30         super.onLowMemory();
31     }
32 
33     @Override
34     public void onTrimMemory(int level) {
35         // 程式在記憶體清理的時候執行
36         KLog.d(TAG, "onTrimMemory");
37         super.onTrimMemory(level);
38     }
39 
40     @Override
41     //配置改變時觸發這個方法
42     public void onConfigurationChanged(Configuration newConfig) {
43         KLog.d(TAG, "onConfigurationChanged");
44         super.onConfigurationChanged(newConfig);
45     }
46 
47 }

 

四、總結一下

1.Application的生命週期在整個應用執行期間是最長的

2.具體關於Applicatiom被殺死的情況在上面的程式碼已有體現 下面引用下其他人總結的一些情況

 

備註:application 被殺死的情況分析:
為了決定在記憶體較低的時候殺掉哪個程序, Android會根據執行在這些程序內的元件及他們的狀態把程序劃分成一個”重要程度層次”. 其重要的程度按以下規則排序:

1:前端程序可以是一個持有執行在螢幕最前端並與使用者互動的Activity的程序(onResume方法被呼叫時),也可以是持有一個正在執行的IntentReceiver(也就是說他正在執行自己的onReceiveIntent方法)的程序. 在系統中, 只會有少數這樣的程序, 並且除非記憶體已經低到不夠這些程序執行, 否則系統不會主動殺掉這些程序. 這時, 裝置通常已經達到了需要記憶體整理的狀態, 所以殺掉這些程序是為了不讓使用者介面停止響應.

2:可視程序是持有一個被使用者可見, 但沒有顯示在最前端 (onPause方法被呼叫時) 的Activity的程序. 舉例來說, 這種程序通常出現在一個前端Activity以一個對話框出現並保持前一個Activity可見時. 這種程序被系統認為是極其重要的, 並且通常不會被殺掉, 除非為了保持所有前端程序正常執行不得不殺掉這些可見程序.

3:服務程序是持有一個Service的程序, 該Service是由startService()方法啟動的, 儘管這些程序使用者不能直接看到, 但是通常他們做的工作使用者是十分關注的(例如, 在後臺播放mp3或是在後臺下載 上傳檔案), 所以, 除非為了保持所有的前端程序和可視程序正常執行外, 系統是不會殺掉服務程序的.

4:後臺程序是持有一個不再被使用者可見的Activity(onStop()方法被呼叫時)的程序. 這些程序不會直接影響使用者體驗. 加入這些程序已經完整的,正確的完成了自己的生命週期(訪問Activity檢視更多細節), 系統會在為前三種程序釋放記憶體時隨時殺掉這些後臺程序. 通常會有很多的後臺程序在執行, 所以這些程序被存放在一個LRU列表中, 以保證在低記憶體的時候, 最近一個被使用者看到的程序會被最後殺掉

5:空程序是沒有持有任何活動應用元件的程序. 保留這種程序的唯一理由是為了提供一種快取機制, 縮短他的應用下次執行時的啟動時間. 就其本身而言, 系統殺掉這些程序的目的是為了在這些空程序和底層的核心快取之間平衡整個系統的資源

 

新人學習中,如有不正確的地方還望大家諒解,歡迎評論指出問