1. 程式人生 > >Android應用全域性獲取Context的技巧

Android應用全域性獲取Context的技巧

———————-歡迎轉載!———————–

Android apk中很多地方都會用到Context,如:

  • 彈出Toast
  • 啟動Activity
  • 傳送廣播sendBroadcast(intent)
  • 操作資料庫
  • 使用通知等

大多操作都是在Activity中進行的,而Activity本身就是一個Context物件。
但當應用程式架構複雜時,很多邏輯就會脫離Activity類,而是一個純粹的Java類,
此時若需要使用Context,怎麼辦呢?

本文主要介紹這種情況下獲取全域性Context的方法。

定製Application類

Android提供了一個Application類,應用程式啟動時系統會自動初始化該Application。

我們可以定製一個自己的Application類繼承自原始Application類,
以便管理程式的一些全域性狀態,如全域性Context。

    public class MyApplication extends Application {

        private static Context mContext;

        @Override
        public void onCreate(){
            mContext = getApplicationContext();
        }

        public static Context getContext() {
            return mContext;
        }
    }

然後修改AndroidManifest.xml檔案,告知系統程式啟動時需要初始化MyApplication類,而不是預設的Application類。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hello"
    android:versionCode="1"
    android:versionName="1.0"
    android:sharedUserId="android.uid.system" >

    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />



    <application
        android:name="com.exmaple.hello.MyApplication"
        ...... >
        ......
    </application>
</manifest>

注意:指定MyApplication的name時一定要加上完整的包名:com.exmaple.hello.MyApplication,否則系統無法找到該類。

如此我們就實現了一種全域性獲取Context的機制了,在程式任何地方都可以呼叫MyApplication.getContext()方法獲取全域性Context。