中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

都兰县| 莫力| 历史| 景德镇市| 龙泉市| 瓦房店市| 丰县| 横山县| 麦盖提县| 漠河县| 锡林郭勒盟| 泰宁县| 宁都县| 太原市| 铁岭市| 缙云县| 丰台区| 安多县| 瑞丽市| 镇江市| 丁青县| 涿州市| 耒阳市| 深州市| 财经| 长汀县| 黔南| 嫩江县| 浠水县| 安宁市| 民乐县| 武平县| 连江县| 竹溪县| 获嘉县| 岳阳市| 永川市| 临沂市| 怀仁县| 大港区| 芜湖县|