91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中AsyncTask內存安全怎么用

發布時間:2021-08-09 11:17:33 來源:億速云 閱讀:150 作者:小新 欄目:移動開發

小編給大家分享一下Android中AsyncTask內存安全怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

問題

內部類和內部匿名類會導致內存泄漏,所以很多時候異步代碼寫的很多。之后一直在想,異步代碼到底應該怎么寫。怎么才是規范的寫法。怎么才是簡潔的寫法。

思路

以一個弱引用的接口作為主線程與子線程交流的橋梁。

代碼

WeakTask.java

public class WeakTask<T> extends AsyncTask<Void, Void, T> {

  private WeakReference<OnWeakTaskListener<T>> listenerReference;

  public WeakTask(OnWeakTaskListener<T> listener){
    this.listenerReference = new WeakReference<>(listener);
  }
  @Override
  protected T doInBackground(Void... voids) {
    if (listenerReference.get() != null) {
      return listenerReference.get().middle();
    }else{
      return null;
    }
  }

  @Override
  protected void onPreExecute() {
    super.onPreExecute();
    if (listenerReference.get() != null) {
      listenerReference.get().before();
    }
  }

  @Override
  protected void onPostExecute(T t) {
    super.onPostExecute(t);
    if (listenerReference.get() != null && t != null){
      listenerReference.get().after(t);
    }
  }
}

OnWeakTaskListener

public interface OnWeakTaskListener<T> {

  void before();

  T middle();

  void after(T t);
}

使用---->LoginActivity.java

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

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

  private void initLayout(){
    findViewById(R.id.btn_login).setOnClickListener(this);
  }

  @Override
  public void onClick(View view) {
    if (view.getId() == R.id.btn_login){
      new WeakTask<Integer>(new LoginWeakTaskListener()).execute();
    } 
  }


  private class LoginWeakTaskListener implements OnWeakTaskListener<Integer>{

    @Override
    public void before() {
       ...開始前
    }

    @Override
    public Integer middle() {
       ...內部執行
    }

    @Override
    public void after(Integer integer) {
       ...結果返回后處理
    }
  }
}

以上是“Android中AsyncTask內存安全怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆德县| 司法| 张家川| 紫金县| 桂东县| 于都县| 交口县| 皮山县| 荥阳市| 德令哈市| 新安县| 南郑县| 德州市| 扎囊县| 辛集市| 泰和县| 罗源县| 翁源县| 确山县| 浠水县| 睢宁县| 额济纳旗| 怀安县| 洞头县| 防城港市| 凤庆县| 瑞昌市| 江山市| 怀来县| 钟祥市| 河间市| 梁河县| 呼玛县| 凭祥市| 孝义市| 万州区| 时尚| 肥城市| 顺平县| 怀宁县| 三亚市|