精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android全局對象Application的使用,以及如何在任何地方得到Application全局對象
Application和Activity,Service一樣是android框架的一個系統組件,當android程序啟動時系統會創建一個application對象,用來存儲系統的一些信息。通常我們是不需要指定一個Application的,這時系統會自動幫我們創建。打開每一個應用程序的manifest文件,可以看到activity都是包含在application標簽之中,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<application
android:label="ViewPagerIndicator Sample"
android:icon="@drawable/icon">
<activity
android:name=".ListSamples"
android:label="ViewPager Indicator">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
.......
......
......
android系統會為每個程序運行時創建一個Application類的對象且僅創建一個,所以Application是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的,它的生命周期就等于這個程序的生命周期。因為它是全局的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。因此在安卓中我們可以避免使用靜態變量來存儲長久保存的值,而用Application。
為了更好的利用Application的這一特性,比如我們需要Application來保存一些靜態值,需要自定義繼承于Application的類,然后在這個類中定義一個變量來保存。在默認情況下應用系統會自動生成Application 對象,但是如果我們自定義了Application,那就需要告知系統,實例化的時候,是實例化我們自定義的,而非默認的。比如我們自定義了一個AppContext類:
1
2
3
4
5
6
7
8
public class AppContext extends Application {
public static final int NETTYPE_WIFI = 0x01;
public static final int NETTYPE_CMWAP = 0x02;
public static final int NETTYPE_CMNET = 0x03;
public static final int PAGE_SIZE = 20;//默認分頁大小
private static final int CACHE_TIME = 10*60000;//緩存失效時間
為了讓系統實例化的時候找到,我們必須在manifest中修改application標簽屬性:
1
2
3
4
5
<application
android:name=".AppContext"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
關鍵的是這句:android:name=".AppContext"
通常Application全局對象是通過Context或者Activity的getApplicationContext()方法獲得的比如我們在應用程序中想要獲得我們剛剛定義的AppContext對象,就需要在activity中這樣做:
appContext = (AppContext)this.getApplicationContext();
如果有Context對象,還可以:appContext = (AppContext)mContext.getApplicationContext();
但是很多時候我們的代碼可能在activity之外,且沒有context對象的引用,但是又需要獲得AppContext對象,原始的做法可能是想辦法將activity或者context傳遞到需要調用的地方,但是這樣代碼耦合度太高,可讀性差。我們有更優雅的做法。
我們談到Application對象是全局的,單例的,既然是單例應該有一個類方法能讓我們獲得這個單例對象才是,但Application本身沒有,我們只能在自定義的時候想辦法。
Application是系統的一個組件,也就有自己的生命周期函數,讓人感到意外的是他的生命周期函數中居然也有onCreate(),onCreate是被自動調用的,我們可以利用這點來獲得這個Application對象。
在AppContext中加入如下幾行代碼:
1
2
3
4
5
6
7
8
9
10
private static AppContext instance;
public static AppContext getInstance() {
returninstance;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
instance = this;
}
這樣我們就能在app工程的任何地方通過AppContext.getInstance()來獲得Application全局對象。比如我定義了一個工具類,在工具內中我們需要使用
Context的getExternalFilesDir()方法。但是這個工具類沒有直接的辦法獲取到context,于是我們可以:
1
returnAppContext.getInstance().getExternalFilesDir(null);
轉自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0924/1558.html
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android中context及全局變量小析
Android開發技巧:Application和Instance
在任意位置獲取應用程序Context
Android源碼分析
Android Context 到底是什么? – 碼農網
談談Android里的Context的使用!!!
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 桦川县| 康乐县| 涪陵区| 县级市| 晋江市| 丰都县| 田阳县| 武鸣县| 京山县| 周口市| 颍上县| 奉化市| 隆化县| 呈贡县| 邓州市| 靖宇县| 安多县| 六安市| 博白县| 朔州市| 纳雍县| 崇明县| 府谷县| 永修县| 湟中县| 定陶县| 高雄市| 高州市| 平顺县| 安乡县| 南投县| 罗田县| 贵阳市| 洮南市| 新余市| 宜阳县| 冷水江市| 江安县| 英超| 泗阳县| 乐昌市|