android對(duì)于內(nèi)存泄露和內(nèi)存溢出的見解和簡(jiǎn)要解決方案

內(nèi)存泄露

內(nèi)存沒有及時(shí)的被收回可理解為內(nèi)存泄露;
例如Activity中有一個(gè)耗時(shí)操作,耗時(shí)操作中有對(duì)Activity強(qiáng)引用;
當(dāng)Activtiy被用戶關(guān)閉時(shí),耗時(shí)操作還沒結(jié)束的話,此時(shí)activtiy不能被釋放,造成內(nèi)存泄露!
解決方案:
耗時(shí)操作中使用弱引用指向activtiy,這樣activtiy的生命周期就不受耗時(shí)操作的影響了!
例子:

    static class MyTask extends AsyncTask<String, Integer, String> {
        private WeakReference<TextView> mWrTv;
        public MyTask(TextView textView) {
            mWrTv = new WeakReference<>(textView);
        }
        @Override
        protected String doInBackground(String... strings) {
            for (int i = 0; i <= 10; i++) {
                publishProgress(i);
                Thread.sleep(1000);
            }
            return "";
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            int num = values[0];
            //這里可能為空,因?yàn)楫?dāng)activtiy被收回后mWrTv就會(huì)空,因此需要進(jìn)行判斷
            if (mWrTv.get() != null) {
                mWrTv.get().setText(num + "");
            }
        }
    }

內(nèi)存溢出

當(dāng)創(chuàng)建對(duì)象時(shí),沒有足夠的內(nèi)存時(shí),便出現(xiàn)內(nèi)存溢出(OOM),常見為listview加載圖片;
解決方案:
采用軟引用方式對(duì)圖片對(duì)象進(jìn)行引用;
當(dāng)內(nèi)存不足時(shí)系統(tǒng)便收回軟引用的圖片,從而解決oom;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容