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

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>
            欧美成年人在线观看| 国产亚洲欧美日韩在线一区| 亚洲精品影院| 夜夜嗨一区二区三区| 亚洲精品孕妇| 亚洲一区二区三区影院| 性伦欧美刺激片在线观看| 新片速递亚洲合集欧美合集| 午夜一区在线| 久久精品一二三| 欧美第一黄网免费网站| 欧美日韩亚洲一区二区三区在线 | 免费成人高清| 欧美日韩美女在线| 国产午夜一区二区三区| 亚洲国产日韩美| 亚洲天天影视| 久久亚洲春色中文字幕| 亚洲国产日韩欧美在线动漫| 日韩视频一区二区在线观看| 校园春色综合网| 欧美日韩伦理在线免费| 国产在线精品一区二区中文| 99视频在线观看一区三区| 久久精品一区二区三区不卡牛牛| 欧美激情亚洲视频| 校园激情久久| 国产精品va在线播放| 亚洲国产精品黑人久久久| 欧美在线视频不卡| 亚洲精品极品| 久久天天躁夜夜躁狠狠躁2022 | 国产一区二区三区精品欧美日韩一区二区三区 | 久久精品国产免费| 欧美色另类天堂2015| 在线 亚洲欧美在线综合一区| 国产精品99久久久久久久久 | 亚洲高清二区| 久久久国产精品亚洲一区| 国产精品免费久久久久久| 亚洲美女区一区| 欧美高清你懂得| 欧美在线视频一区二区三区| 久久成人av少妇免费| 一区二区欧美日韩视频| 久久久久久久综合日本| 一本色道久久99精品综合| 欧美aa在线视频| 伊人久久亚洲热| 先锋影音国产精品| 一区二区三区高清| 欧美三级视频在线播放| 一本一本a久久| 亚洲日本欧美| 欧美激情91| 亚洲精品美女| 亚洲韩国日本中文字幕| 欧美成人69| 91久久黄色| 欧美激情 亚洲a∨综合| 久久综合五月天婷婷伊人| 在线观看日产精品| 免费观看日韩av| 久久综合久久综合这里只有精品| 在线观看成人一级片| 男女激情久久| 欧美大片免费| 亚洲一区二区在线看| 亚洲天堂第二页| 国产日韩精品视频一区二区三区| 欧美在线精品免播放器视频| 欧美一区二区三区在线观看视频| 韩国女主播一区| 欧美多人爱爱视频网站| 欧美精品福利视频| 亚洲欧美视频在线观看| 欧美一区二区三区免费视频| 在线观看欧美黄色| 亚洲美女尤物影院| 国产视频精品xxxx| 欧美电影打屁股sp| 欧美日韩中文字幕在线| 欧美一区二区三区免费视频| 久久免费高清视频| 亚洲图片在线| 久久男女视频| 亚洲女女做受ⅹxx高潮| 欧美专区18| 一区二区三区四区五区在线| 午夜欧美不卡精品aaaaa| 亚洲国产网站| 亚洲一区久久久| 亚洲福利视频三区| 一区二区三区精品视频| 伊人影院久久| 亚洲视频每日更新| 亚洲人被黑人高潮完整版| 亚洲婷婷免费| 亚洲欧洲综合| 午夜精品久久99蜜桃的功能介绍| 亚洲成人资源网| 亚洲图片欧洲图片日韩av| 1024欧美极品| 午夜精品国产| 一区二区精品在线观看| 久久久久网址| 欧美一区二区三区视频免费播放| 噜噜噜91成人网| 国产欧美精品xxxx另类| 亚洲精品1区2区| 精品999久久久| 亚洲一区综合| 一区二区高清在线| 久久一区二区三区国产精品| 欧美一二三视频| 欧美日韩一级黄| 亚洲国产综合91精品麻豆| 国产欧美欧洲在线观看| 亚洲人在线视频| 亚洲精品国产精品国产自| 久久国产主播| 久久久xxx| 国产欧美精品一区aⅴ影院| 日韩亚洲国产欧美| 99精品福利视频| 欧美激情成人在线视频| 欧美激情欧美激情在线五月| 尤妮丝一区二区裸体视频| 欧美一级午夜免费电影| 久久国产精品色婷婷| 国产欧美日韩| 午夜精品久久久久99热蜜桃导演| 这里是久久伊人| 欧美日韩第一页| 亚洲精品一区二区网址| 一本一本大道香蕉久在线精品| 欧美精品午夜视频| 99精品国产热久久91蜜凸| 亚洲无线一线二线三线区别av| 欧美日韩一区二区三区视频| 日韩午夜一区| 先锋影音久久久| 国产亚洲欧美日韩精品| 欧美综合国产| 欧美国产三级| 99这里有精品| 国产精品久久久久三级| 午夜欧美大片免费观看| 女人天堂亚洲aⅴ在线观看| 亚洲黑丝一区二区| 欧美日韩国产天堂| 亚洲欧美一区二区视频| 久久亚洲欧美| 亚洲精品在线一区二区| 欧美日韩综合另类| 午夜精品久久久久久久久久久久久 | 欧美伦理在线观看| 亚洲视频在线二区| 久久久久久久网站| 亚洲三级影院| 国产精品高清在线| 久久久久久网址| 亚洲精品美女91| 欧美一区二区精品| 亚洲国产精品va在线观看黑人| 欧美精品少妇一区二区三区| 亚洲一区二区三区四区五区午夜 | 亚洲深夜福利在线| 国产无一区二区| 欧美大片91| 性一交一乱一区二区洋洋av| 亚洲国产激情| 国产精品乱人伦中文| 久久精品一区二区| a4yy欧美一区二区三区| 久久精品国产99国产精品| 91久久精品一区| 国产麻豆精品theporn| 欧美成ee人免费视频| 亚洲欧美精品suv| 亚洲国产欧美在线人成| 欧美在线视频一区二区| 亚洲乱码国产乱码精品精 | 欧美日韩国内| 老司机精品视频网站| 亚洲一区999| 91久久精品一区| 久久这里有精品视频| 亚洲综合色网站| 99精品国产99久久久久久福利| 国产亚洲日本欧美韩国| 欧美性猛交视频| 欧美大片在线看| 久久久久国产免费免费| 亚洲欧美亚洲| 亚洲一区二区三区精品在线| 亚洲青涩在线| 亚洲国产精品尤物yw在线观看| 久久免费视频一区| 久久精品国产亚洲精品|