亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中context怎么使用

發布時間:2021-12-18 17:09:18 來源:億速云 閱讀:112 作者:iii 欄目:移動開發

本篇內容介紹了“Android中context怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Android中context可以作很多操作,但是最主要的功能是加載和訪問資源。在android中有兩種context,一種是 application context,一種是activity context,通常我們在各種類和方法間傳遞的是activity context,比如一個activity的onCreate。

Java 代碼:

protected void onCreate(Bundle state) {   super.onCreate(state);   TextView label = new TextView(this); //傳遞context給view control   label.setText("Leaks are bad");   setContentView(label);   }

把activity context傳遞給view,意味著view擁有一個指向activity的引用,進而引用activity占有的資源:view hierachy, resource等。

這樣如果context發生內存 泄露的話,就會泄露很多內存。

這里泄露的意思是gc沒有辦法回收activity的內存。

Leaking an entire activity是很容易的一件事。

當屏幕 旋轉的時候,系統 會銷毀當前的activity,保存狀態 信息,再創建一個新的。

比如我們寫了一個應用 程序 ,它需要加載一個很大的圖片,我們不希望每次旋轉屏 幕的時候都銷毀這個圖片,重新加載。實現這個要求的簡單想法就是定義 一個靜態的Drawable,這樣Activity 類創建銷毀它始終保存在內存中。

實現類似:

java代碼:

public class myactivity extends Activity {   private static Drawable sBackground;   protected void onCreate(Bundle state) {   super.onCreate(state);   TextView label = new TextView(this);   label.setText("Leaks are bad");   if (sBackground == null) {   sBackground = getDrawable(R.drawable.large_bitmap);   }   label.setBackgroundDrawable(sBackground);//drawable attached to a view   setContentView(label);   }   }

這段程序看起來很簡單,但是卻問題很大。當屏幕旋轉的時候會有leak(即gc沒法銷毀activity)。我們剛才說過,屏幕旋轉的時候系統會銷毀當前的activity。但是當drawable和view關聯后,drawable保存了view的reference,即sBackground保存了label的引用,而label保存了activity的引用。既然drawable不能銷毀,它所 引用和間接引用的都不能銷毀,這樣系統就沒有辦法銷毀當前的activity,于是造成了內存泄露。gc對這種類型的內存泄露是無能為力的。

避免這種內存泄露的方法是避免activity中的任何對象 的 生命周期長過activity,避免由于對象對 activity的引用導致activity不能正常被銷毀。我們可以使用application context。application context伴隨application的一生,與activity的生命周期無關。application context可以通過Context.getApplicationContext或者Activity.getApplication方法獲取 。

避免context相關的內存泄露,記住以下幾點:

1. 不要讓生命周期長的對象引用activity context,即保證引用activity的對象要與activity本身生命周期是一樣的。

2. 對于生命周期長的對象,可以使用application context。

3. 避免非靜態的內部類,盡量使用靜態類,避免生命周期問題,注意內部類對外部對象引用導致的生命周期變化。

“Android中context怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会昌县| 榆中县| 三明市| 阿克| 宁城县| 宜君县| 栖霞市| 景洪市| 三明市| 济宁市| 辽源市| 达拉特旗| 皮山县| 三亚市| 澄迈县| 神农架林区| 休宁县| 札达县| 丹东市| 灌阳县| 凯里市| 盖州市| 上饶县| 宁国市| 利津县| 金塔县| 剑阁县| 宜兰县| 阿合奇县| 平果县| 正阳县| 林西县| 海口市| 七台河市| 塔城市| 宜昌市| 石嘴山市| 新安县| 温州市| 临沭县| 永平县|