安卓?jī)?nèi)存泄漏場(chǎng)景

一牡彻、匿名內(nèi)部類持有外部類的引用,如常用的Thread、Handler和AsyncTask
如下:

public class SyncTaskDemoActivity extends Activity {  
    private int today = 0;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        // 異步執(zhí)行任務(wù)  
        new AsyncTask<Object, Void, Boolean>() {  
            @Override  
            protected void onPreExecute() {  
                super.onPreExecute();  
            }  
  
            @Override  
            protected Boolean doInBackground(Object... params) {  
                // do something in backfround  
                // 長(zhǎng)時(shí)間的耗時(shí)  
                while (true) {  
                    today++;  
                    if (today > 100000)  
                        break;  
                }  
                return true;  
            }  
  
            @Override  
            protected void onPostExecute(Boolean result) {  
                super.onPostExecute(result);  
                if (result) {  
                    // success do something  
                } else {  
                    // error  
                }  
            }  
        }.execute();  
    }  
} ```
修改后:

public class SyncTaskDemoActivity extends Activity {
private int today = 0;
private AsyncTask mAsyncTask;

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  

    mAsyncTask = new AsyncTask<Object, Void, Boolean>() {  
        @Override  
        protected void onPreExecute() {  
            super.onPreExecute();  
        }  

        @Override  
        protected Boolean doInBackground(Object... params) {  
            // do something in backfround  
            // 長(zhǎng)時(shí)間的耗時(shí)  
            while (true) {  
                if (cancel(true))  
                    break;  
                today++;  
                if (today > 100000)  
                    break;  
            }  
            return true;  
        }  

        @Override  
        protected void onPostExecute(Boolean result) {  
            super.onPostExecute(result);  
            if (result) {  
                // success do something  
            } else {  
                // error  
            }  
        }  

        @Override  
        protected void onCancelled() {  
            super.onCancelled();  
        }  
    };  
    // 異步執(zhí)行任務(wù)  
    mAsyncTask.execute();  
}  

@Override  
protected void onDestroy() {  
    super.onDestroy();  
    mAsyncTask.cancel(true);  
}  

}


解決辦法:繼承該類,并聲明為靜態(tài)私有爷怀,因?yàn)殪o態(tài)私有類不持有外部類的引用,對(duì)于AsyncTask可以執(zhí)行cancle方法

二带欢、靜態(tài)變量持有該類的實(shí)例运授,銷毀時(shí),無(wú)法釋放該實(shí)例
以下代碼均會(huì)導(dǎo)致內(nèi)存泄漏

public class MainActivity extends Activity{
private static Context sContext;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sContext = this;
}
}

public class MainActivity extends Activity{
private static View view;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new View(this);
}
}

三洪囤、單例模式導(dǎo)致的內(nèi)存泄漏

public class TestManager{
private List<OnDataArrivedListener> listeners = new ArrayList<>();
private static class SingletonHolder{
public static final TestManager instance = new TestManager();
}

private TestManager(){
    
}

public static TestManager getInstance(){
    return SingletonHolder.instance;
}

public synchronized void registerListener(OnDataArrivedListener listener){
    if (!listeners.equals(listener))
        listeners.add(listener);
}

public synchronized  void unregisterListener(OnDataArrivedListener listener){
    if (listeners.equals(listener))
        listeners.remove(listener);
}

public interface OnDataArrivedListener{
    public void onDataArrived(Object data);
}

}

原因:由于疏忽徒坡,忘了寫解綁,就會(huì)導(dǎo)致內(nèi)存泄漏

四瘤缩、屬性動(dòng)畫
屬性動(dòng)畫持有該類的一個(gè)View,若該類銷毀時(shí),屬性動(dòng)畫還在執(zhí)行伦泥,將導(dǎo)致內(nèi)存泄漏
解決辦法:調(diào)用屬性動(dòng)畫的cancel
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剥啤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子不脯,更是在濱河造成了極大的恐慌府怯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件防楷,死亡現(xiàn)場(chǎng)離奇詭異牺丙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)复局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門冲簿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人亿昏,你說(shuō)我怎么就攤上這事峦剔。” “怎么了角钩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵吝沫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我递礼,道長(zhǎng)惨险,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任脊髓,我火速辦了婚禮辫愉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘供炼。我一直安慰自己一屋,他們只是感情好窘疮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冀墨,像睡著了一般闸衫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诽嘉,一...
    開(kāi)封第一講書(shū)人閱讀 49,874評(píng)論 1 290
  • 那天蔚出,我揣著相機(jī)與錄音,去河邊找鬼虫腋。 笑死骄酗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悦冀。 我是一名探鬼主播趋翻,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盒蟆!你這毒婦竟也來(lái)了踏烙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤历等,失蹤者是張志新(化名)和其女友劉穎讨惩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寒屯,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荐捻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寡夹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片处面。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖要出,靈堂內(nèi)的尸體忽然破棺而出鸳君,到底是詐尸還是另有隱情,我是刑警寧澤患蹂,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布或颊,位于F島的核電站,受9級(jí)特大地震影響传于,放射性物質(zhì)發(fā)生泄漏囱挑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一沼溜、第九天 我趴在偏房一處隱蔽的房頂上張望平挑。 院中可真熱鬧,春花似錦、人聲如沸通熄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唇辨。三九已至廊酣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赏枚,已是汗流浹背亡驰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饿幅,地道東北人凡辱。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栗恩,于是被迫代替她去往敵國(guó)和親透乾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,807評(píng)論 25 707
  • 前幾天整理了Java面試題集合,今天再來(lái)整理下Android相關(guān)的面試題集合.如果你希望能得到最新的消息,可以關(guān)注...
    Boyko閱讀 3,625評(píng)論 8 135
  • java 接口的意義-百度 規(guī)范摄凡、擴(kuò)展续徽、回調(diào) 抽象類的意義-樂(lè)視 為其子類提供一個(gè)公共的類型封裝子類中得重復(fù)內(nèi)容定...
    交流電1582閱讀 2,214評(píng)論 0 11
  • 最近過(guò)得不順,想想纫版,大概是自己逼得太緊床绪。 大概想想最近做的事,總有種強(qiáng)行扁擔(dān)當(dāng)起重機(jī)用的感覺(jué)其弊,可能是勉強(qiáng)了些癞己。想想...
    嵐庸閱讀 254評(píng)論 0 2
  • 鄭老的兒子愛(ài)健身,愛(ài)參加各種體育活動(dòng)梭伐,這次推遲過(guò)來(lái)頂班(姐弟六個(gè)輪流照顧老爸)是因?yàn)榍安痪脜⒓幼闱蚧顒?dòng)而受了傷痹雅。有...
    路重波閱讀 419評(píng)論 1 0