Android開發(fā)須知(1):Application context與Activity context

現(xiàn)在算下來,在互聯(lián)網(wǎng)公司已經(jīng)實習兩個月了,這兩個月收獲頗豐,有很多很多的東西值得去記。(嗯,絕對不是偷懶。干貨都記本地了,等總結好了再發(fā)博客)

近期我準備開一個坑,就是寫《Android開發(fā)須知》這個系列。因為在實習過程中,我發(fā)現(xiàn)在Android開發(fā)過程中有許多很小卻很常見的“深坑”。不說是初來乍到的應屆生,很多老司機會在這些地方翻車。寫這個系列博客 一來,告誡自己在開發(fā)中要謹記這些小事情,避免犯錯。二來,就是與各位準備開發(fā)Android的小伙伴進行探討,避免踩坑。

言歸正傳,咋們從最常見的問題開始

Context開始講起

什么是Context?Android為什么要用context?是我初學Android的困惑。
Context被翻譯為“上下文”。這個概念表面看上去通俗易懂,實際上是“一萬人就有一萬個哈姆雷特”。在這里我表述一下我對context的看法,context就是一個Android系統(tǒng)的高級憑證,重要的類都必須拿憑證打開,不是什么阿貓阿狗都可以隨便new出來的。就比如啟動一個ACtivity:

 Intent intent = new Intent(context, MainActivity.class);
 context.startActivity(intent);

出于安全考慮,Android系統(tǒng)是不允許Activity憑空出現(xiàn)的。也就說,要持有context憑證才能去啟動一個Activity。保證安全的、正確的開啟下一個重要組件。

除了啟動Android的四大組件以外,通過context還可以訪問APK中的各種資源,訪問Package的相關信息和各種權限管理。

比如去獲取個版本名稱

    PackageManager pm = context.getPackageManager();
    PackageInfo pi=pm.getPackageInfo(context.getPackageName(), 0);
    pi.versionName
Context的生命周期

鋪墊完了,今天我們的兩個主角登場:Activity context與Application context。
我們先來看一個Demo

public class Demo{
    private static Demo instance;
    private Context context;
    
    private Demo(Context context){
        this.context=context;
    }
    public getDemoInstance(Context context){
        if(instance == null){
            instance=new Demo(context)
        }
        return instance
    }
}

這是一個很簡單的單例模式,單例模式的特殊性讓它的生命周期和Application一樣長,如果開始就傳入一個Activity context,那么當這個Activity被銷毀后,這個單例依然引用著它的context,使得Activity無法GC,導致內(nèi)存泄漏。

Activity context跟Activity的生命周期是相關的,Activity可以銷毀幾次(反復開啟),那么屬于Activity的context就會銷毀多次

而Application context的生命周期與Application相同,context隨著Application的銷毀而銷毀,伴隨application的一生。并與activity的生命周期無關.可以通過Context.getApplicationContext或者Activity.getApplication方法獲取。

所以Context的生命周期不同,決定了context的使用不同。

Context的用法

1.把控context的生命周期:
使用context,要先明確使用的context生命周期長短。如果是工具類獲取一些信息,就使用Application Context解決問題。如果是啟動一個Activity就使用Activity context。

2.及時釋放context:
如果我們必須使用Activity context讓其他類持有,那么一定要記得在Activity的onDestroy()時或之前把給出的context置空。避免讓“閑雜人等”長期持有。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容