android開發context介紹

2021-07-24 22:10:02 字數 1525 閱讀 3405

context,很多開發人員,一定很迷惑。下面簡單介紹一下

但是在程式的角度context是什麼呢?在程式的角度,我們可以有比較權威的答案,context是個抽象類,我們可以直接通過看其類結構來說明答案:

先扯這麼多,有能力了會從別的角度去審視context,加油~

下面開始介紹在使用context時,需要注意的問題。

大家在編寫一些類時,例如工具類,可能會編寫成單例的方式,這些工具類大多需要去訪問資源,也就說需要context的參與。

在這樣的情況下,就需要注意context的引用問題。

例如以下的寫法:

package com.mooc.shader.roundimageview;

import android.content.context;

public class custommanager

public static synchronized custommanager getinstance(context context)

return sinstance; }

//some methods

private void someothermethodneedcontext()

}

對於上述的單例,大家應該都不陌生(請別計較getinstance的效率問題),內部保持了乙個context的引用;

這麼寫是沒有問題的,問題在於,這個context哪來的我們不能確定,很大的可能性,你在某個activity裡面為了方便,直接傳了個this;這樣問題就來了,我們的這個類中的sinstance是乙個static且強引用的,在其內部引用了乙個activity作為context,也就是說,我們的這個activity只要我們的專案活著,就沒有辦法進行記憶體**。而我們的activity的生命週期肯定沒這麼長,所以造成了記憶體洩漏。

那麼,我們如何才能避免這樣的問題呢?

有人會說,我們可以軟引用,嗯,軟引用,假如被**了,你不怕nullpointexception麼。

把上述**做下修改:

public static synchronized custommanager getinstance(context context)

return sinstance;

}

下面就開始介紹各種context的應用場景。

數字2:在這些類中去layout inflate是合法的,但是會使用系統預設的主題樣式,如果你自定義了某些樣式可能不會被使用。

數字3:在receiver為null時允許,在4.2或以上的版本中,用於獲取黏性廣播的當前值。(可以無視)

注:contentprovider、broadcastreceiver之所以在上述**中,是因為在其內部方法中都有乙個context用於使用。

Android開發之全域性獲取Context的技巧

第一行 android 高階篇 這本書對於入門來說確實很棒,很簡單明瞭的介紹了android開發中涉及到的方方面面,對我的幫助很大,同時記錄一些該書中一些對我以後開發有用的東西,以方便使用。1 public23 private static context context 45 override 6...

Android開發 Android搜尋框架(二)

1.建立搜尋建議提供者 android已經為我們建立了乙個預設的,我們只需要繼承 searchrecentsuggestionprovider 就稍做修改就可以了。見 1 import android.content.searchrecentsuggestionsprovider 2 3 4 搜尋提...

Android開發 Android顏色透明度換算表

目錄 一 背景 二 顏色值標準格式 三 透明度 四 透明度計算 作為一名android開發人員,在每次開發的時候,ui會在設計圖中標註顏色值,或者會直接給出顏色值,如 ff2309,但是有時候為了達到某種效果,需要在顏色值前面新增透明度,如 40 的透明度。還有一種情況就是交給ui驗收的時候,說介面...