【 Android 中文開放式課程 】關於 Application 三兩事


什麼是 Application?
當 Android App 程式啟動時,通常我們不需要去特別指定一個Application,系統層會自動創建一個 Application 對象,啟動Application 後,系統會創建一個 PID,即 Process ID (進程識別號碼),所有的 Activity 都會在此進程上運行。
開啟 AndroidManifest.xml 文件,我們可以看到 activity 都是包含在 Application 標籤之中,如下:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SampleActivity"/>
<activity android:name=".Sample2Activity"/>
</application>

Application 用途?
Application 的生命週期是整個 App 程序中最長的,它的生命週期就等於這個App 的生命週期。因為 android 系統會為運行時,僅創建一個Application 類的對象,它是全局的單例(singleton)的,所以在不同的Activity、Service中獲得的對像都是同一個對象。所以可以透過 Application 來進行,如:資料傳遞、資料共享等操作。
我們可以使用 Application 的此特性,自定義繼承於 Application 的類,來保存一些靜態值。

如何自定義 Application ?
public class MyApplication extends Application {
private static final int CACHE_TIME = 5*60*1000 ; //快取失效時間
...
}

AndroidManifest.xml 加入自定義 Application 屬性名稱:
<application
<!-- 關鍵程式修改點,自定義 Application -- >
android:name = ".MyApplication"
...
...
...
>

使用範例:
int cache_time = MyApplication.CACHE_TIME;

我們很多時候,需要 Context 對象 ,但可能在 activity 之外,沒有 Context 對象可以引用,但又需要獲得 AppContext 對象。
比較 Low 的做法,是將 activity 或者 context 傳遞到需要調用的地方,但是這樣一來,程式碼耦合度太高,壞味道出現。
這時後,我們有更優雅的做法,在自定義加入可獲取 Context 對象可以引用。
public class MyApplication extends Application {
...
private static MyApplication mInstance ;
public static synchronized MyApplication getInstance () {
return mInstance ;
}
@Override
public void onCreate () {
super.onCreate ();
mInstance = this ;
}
...
}

使用範例:
...
//在非 activity 類中,獲取資源字串文件資料
String login_msg = MyApplication.getInstance().getString(R.string.login_msg);
...
Ps. 另外一提,我們使用第三方 lib 套件或是SDK ,有時需要進行初始化元件,就也會在此自定義 Application,進行宣告。

HKT 線上教室 每週六日 更新影片
▶ YouTube 頻道
https://goo.gl/3f2pJi
▶ KT 線上教室 臉書粉絲團
https://goo.gl/27H9Li
▶ 贊助我們
https://goo.gl/FiKXAu
▶2017 Android 中文開放式課程 目錄
https://goo.gl/Ti8mGA
▶ YouTube 頻道
https://goo.gl/3f2pJi
▶ KT 線上教室 臉書粉絲團
https://goo.gl/27H9Li
▶ 贊助我們
https://goo.gl/FiKXAu
▶2017 Android 中文開放式課程 目錄
https://goo.gl/Ti8mGA
Android 8 Oreo / Android Studio
Android 教學 / 開發
Android 教學 / 開發
參考資料: