第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android內存泄漏剖析之AsyncTask

標簽:
Java Android
泄漏原因

一个常见的内存泄漏错误是AsyncTask有Activity或者Fragment的的强引用。

错误示例

下面是错误的,因为内部类隐式的含有父类的引用,这种情况下,通常是Activity和Fragment的引用。


class MyActivity extends Activity {
  private AsyncTask<Void, Void, Void> myTask = new AsyncTask<Void, Void, Void>() {
    //
  }
}

这个问题的产生原因是因为AsyncTask的生命周期通常比Activity长,例如=当任务时候,一些配置改变了。

正确的使用AsyncTask方式
  1. AsyncTask变为静态内部类
    2.持有父类Activity或者Fragment的弱引用
    粗暴的代码

class MyActivity extends Activity {
  static class MyTask extends AsyncTask<Void, Void, Void> {
    // 弱引用允许Activity被垃圾收集器清理
    private final WeakReference<MyActivity> weakActivity;

    MyTask(MyActivity myActivity) {
      this.weakActivity = new WeakReference<>(myActivity);
    }

    @Override
    public Void doInBackground(Void... params) {
      // do async stuff here
    }

    @Override
    public void onPostExecute(Void result) {
      // 重新获取Actiity的强引用,并且判断是否存活
      MyActivity activity = weakActivity.get();
      if (activity == null
          || activity.isFinishing()
          || activity.isDestroyed()) {
        // activity死亡了,不再做任何的事情
        return;
      }

      // The activity is still valid, do main-thread stuff here
    }
  }
}
點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
移動開發(fā)工程師
手記
粉絲
424
獲贊與收藏
5663

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消