青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
很多初入Android開發的網友向我們問到Context有什么作用,很多地方都用到它,這里Android123給這些新入門的網友做個簡單的解釋:

   Context字面意思上下文,位于framework package的android.content.Context中,其實該類為LONG型,類似Win32中的Handle句柄,很多方法需要通過Context才能識別調用者的實例,比如說Toast的第一個參數就是Context,一般在Activity中我們直接用this代替,代表調用者的實例為Activity,而到了一個button的onClick(View view)等方法時,我們用this時就會報錯,所以我們可能使用ActivityName.this來解決,主要原因是因為實現Context的類主要有Android特有的幾個模型,Activity、Service以及BroadcastReceiver。

  常規需要Context實例的方法主要有各種Service實現的類,比如說SensorManager在實例化時需要getSystemService(String)方法就必須由Context的實例執行,還有一些私有的文件系統I/O比如說openFileInput以及常用的Toast的makeText方法。

在android中context可以作很多操作,但是最主要的功能是加載和訪問資源。在android中有兩種context,一種是 application context,一種是activity context,通常我們在各種類和方法間傳遞的是activity context。
比如一個activity的onCreate:
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 類創建銷毀它始終保存在內存中。
實現類似:
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. 避免非靜態的內部類,盡量使用靜態類,避免生命周期問題,注意內部類對外部對象引用導致的生命周期變化



posted on 2011-12-05 17:13 life02 閱讀(358) 評論(0)  編輯 收藏 引用 所屬分類: android組件學習
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            91久久国产综合久久| 欧美日韩国产综合在线| 欧美国产综合视频| 欧美四级电影网站| 久久精品免费电影| 老司机免费视频一区二区| 日韩视频一区二区三区在线播放| 亚洲精品日韩激情在线电影| 欧美日韩一区二区免费在线观看| 激情久久综艺| 亚洲激情婷婷| 国产精品女人网站| 一区二区三区四区在线| 久久久一区二区| 亚洲国产日韩欧美综合久久 | 国产欧美一区二区视频| 亚洲色图在线视频| 欧美成人一区在线| 久久精品国产精品亚洲| 日韩一级免费观看| 亚洲欧洲精品一区二区| 美女成人午夜| 久久成人免费电影| 麻豆视频一区二区| 最新国产乱人伦偷精品免费网站| 国产精品羞羞答答| 国产深夜精品福利| 久久久久在线| 日韩视频欧美视频| 曰韩精品一区二区| 久久综合网hezyo| 可以看av的网站久久看| 欧美日韩国产成人在线91| 欧美亚洲一区三区| 久久精品成人| 国产日韩欧美日韩| 欧美成人精品在线观看| 欧美激情中文字幕一区二区| 久久深夜福利| 久久夜色精品国产亚洲aⅴ| 久久久久久久综合日本| 国产精品一区毛片| 欧美日韩亚洲一区二| 亚洲天堂视频在线观看| 性久久久久久久久久久久| 亚洲精品1区2区| 久久精视频免费在线久久完整在线看 | 欧美成人亚洲| 亚洲激情精品| 亚洲无限乱码一二三四麻| 久久久97精品| 欧美69视频| 国产专区精品视频| 欧美激情久久久久| 欧美一级淫片播放口| 国外成人在线视频| 亚洲大片av| 亚洲电影在线看| 亚洲激情成人网| 亚洲欧美视频在线观看视频| 日韩小视频在线观看专区| 99在线精品视频在线观看| 国产精品人成在线观看免费| 久久久夜夜夜| 久久婷婷影院| 午夜久久影院| 亚洲欧美成人网| 欧美激情一区在线| 国产九色精品成人porny| 欧美女同视频| 久久一区二区三区av| 欧美不卡视频一区| 国产九九精品视频| 极品av少妇一区二区| 国产精品亚洲精品| 好男人免费精品视频| 国产三区二区一区久久| 国产精品一区二区在线观看网站| 亚洲欧洲精品天堂一级| 国产一区二区三区免费在线观看 | 亚洲精品五月天| 国产日本欧洲亚洲| 亚洲美女毛片| 午夜精品久久久久久久久久久久 | 欧美伊人影院| 久久精品99国产精品日本| 久久成人18免费观看| 午夜久久tv| 国产婷婷色一区二区三区| 久久久久久久综合狠狠综合| 亚洲日本久久| 国产日韩视频| 亚洲免费电影在线| 亚洲激情视频在线| 欧美粗暴jizz性欧美20| 欧美精品久久久久久久久老牛影院| 国产精品视频网| 久久国产精品一区二区| 亚洲免费视频在线观看| 国产精品白丝av嫩草影院 | 亚洲二区视频| 合欧美一区二区三区| 亚洲欧美日韩一区二区三区在线 | 欧美一级大片在线观看| 欧美精品福利视频| 亚洲黄色av一区| 欧美亚洲日本国产| 国外成人在线视频| 一区二区三区免费在线观看| 国产精品黄页免费高清在线观看| 最新亚洲电影| 亚洲欧洲在线一区| 欧美黄色网络| 一本久道综合久久精品| 久久国产日韩欧美| 99精品欧美| 国产欧美日韩在线视频| 欧美在线视频观看| 国产精品网站在线播放| 欧美一区二区免费观在线| 欧美了一区在线观看| 欧美风情在线观看| 精品盗摄一区二区三区| 看欧美日韩国产| 亚洲欧洲日韩综合二区| 亚洲精品免费一区二区三区| 欧美另类69精品久久久久9999| 亚洲视频在线播放| 一本色道久久综合亚洲精品高清| 欧美亚州在线观看| 亚洲国产高清视频| 亚洲精品婷婷| 久久一区二区三区av| 久久精品国产亚洲a| 一区二区国产日产| 欧美日韩国产色站一区二区三区| 午夜日韩av| 夜夜嗨一区二区| 欧美激情第三页| 亚洲一线二线三线久久久| 久久天堂成人| 一本大道久久a久久精二百| 午夜精品在线| 在线亚洲高清视频| 亚洲欧美日韩国产中文在线| 国产精品日韩在线| 欧美在线free| 亚洲伊人第一页| 久久成人免费网| 亚洲国产成人在线视频| 久久久精品欧美丰满| 在线亚洲观看| 欧美成人精品在线| 久久一二三区| 亚洲小少妇裸体bbw| 亚洲日韩第九十九页| 久久国内精品视频| 欧美一区二区三区免费视频| 国产精品一区二区三区久久| 欧美一区二区三区在线| 久久激五月天综合精品| 亚洲精品中文字| 欧美伊人久久久久久久久影院| 亚洲国产精品va在线观看黑人| 国产性天天综合网| 欧美天天在线| 国内成人在线| 亚洲国产一区二区a毛片| 欧美成人中文| 乱人伦精品视频在线观看| 久久夜色精品国产噜噜av| 欧美日韩的一区二区| 欧美三级乱码| 亚洲高清在线观看| 久久久久久久999| 久久精品二区亚洲w码| 欧美一区深夜视频| 99精品久久久| 亚洲女人av| 欧美91视频| 久久精品视频在线观看| 欧美黄色一区二区| 久久久久99精品国产片| 欧美性猛片xxxx免费看久爱| 欧美午夜美女看片| 欧美日本一区二区视频在线观看| 欧美mv日韩mv国产网站| 欧美午夜精品久久久久久浪潮 | 亚洲一区二区三区精品在线| 亚洲亚洲精品三区日韩精品在线视频| 久久超碰97中文字幕| 久久久高清一区二区三区| 狂野欧美激情性xxxx| 久久视频精品在线| 欧美日韩一区二区三区在线视频| 亚洲高清在线观看| 久久男女视频| 中日韩高清电影网| 久久精品国产一区二区三区免费看| 久久综合狠狠综合久久综青草|