android Application使用見解

Application作爲貫穿整個應用的必不可少的一個類,必須要知道它能做什麼,有什麼缺點。所以,這篇文章主要從Application 源碼方面解讀

一.Application和Dalvik的關係

一般情況下app只會有一個虛擬機,一個虛擬機只會有一個application,也就是說一個Application只會存在一個Dalvik

還有一個app多進程,就意味着app擁有多個Application,多個Dalvik,Application相互獨立,在不同的進程裏面,數據不能相互訪問

二.Application 與Context的關係

說Application就是是一個Context也是正確的,   application 的父類是 ContextWrapper,  ContextWrapper 的父類是  Context,所以說Application就是context是正確的

三.Application能做什麼?

1.因爲本質是context,所以context能做得,它都能做,eg: 獲取顏色 context.getResroucecontext.getColor等常見的資源獲取操作

2.可以獲取一個Looper對象,都知道Looper是和Handler有關聯的,獲取一個Looper對象,可直接通過上下文對象getMainLooper()獲取,也就是說,在應用啓動的時候,app就一直存在一個Looper對象
在Application父類ContextWrapper裏面存在下面這樣一個方法:
在這裏插入圖片描述

3.可以監聽所有Activity的生命週期
在Application裏面,我們能看到如下接口方法
在這裏插入圖片描述
是不是和我們的Activity週期一致呢,所以如果想要監聽Acitivty生命週期,我們可以寫一個MyApplication去繼承Application,
如下圖
在這裏插入圖片描述

在這裏插入圖片描述

4.可以獲取內存使用情況
Application實現了一個接口ComponentCallbacks2,在ComponentCallbacks2裏面封裝了內存Level閾值定義和監聽方法,如下

@IntDef(prefix = { "TRIM_MEMORY_" }, value = {
        TRIM_MEMORY_COMPLETE,
        TRIM_MEMORY_MODERATE,
        TRIM_MEMORY_BACKGROUND,
        TRIM_MEMORY_UI_HIDDEN,
        TRIM_MEMORY_RUNNING_CRITICAL,
        TRIM_MEMORY_RUNNING_LOW,
        TRIM_MEMORY_RUNNING_MODERATE,
})

@Retention(RetentionPolicy.SOURCE)
public @interface TrimMemoryLevel {}

static final int TRIM_MEMORY_COMPLETE = 80;
static final int TRIM_MEMORY_MODERATE = 60;
static final int TRIM_MEMORY_BACKGROUND = 40;
static final int TRIM_MEMORY_UI_HIDDEN = 20;
static final int TRIM_MEMORY_RUNNING_CRITICAL = 15;
static final int TRIM_MEMORY_RUNNING_LOW = 10;
static final int TRIM_MEMORY_RUNNING_MODERATE = 5;

void onTrimMemory(@TrimMemoryLevel int level);

在ComponentCallbacks2的父類ComponentCallbacks裏面同樣有一個低內存監控方法onLowMemory();

當App內存不足的時候,我們可以在Application的TrimMemoryLevel()和onLowMemory()方法中去保存一些我們需要保存的數據、回收一些資源釋放內存等

注意:在保存數據的時候,可能Application已經被系統回收了,此時,我們需要做一個非空判斷

5.上下文對象
application的生命週期是伴隨這個app的,所以,如果有生命週期比較長、且又要引用上下文對象的,最好通過application獲取,這樣就不會發生內存泄漏等問題

application介紹完了,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章