真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

Android中AsyncTask內存安全怎么用

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

創(chuàng)新互聯建站是由多位在大型網絡公司、廣告設計公司的優(yōu)秀設計人員和策劃人員組成的一個具有豐富經驗的團隊,其中包括網站策劃、網頁美工、網站程序員、網頁設計師、平面廣告設計師、網絡營銷人員及形象策劃。承接:成都做網站、成都網站設計、網站改版、網頁設計制作、網站建設與維護、網絡推廣、數據庫開發(fā),以高性價比制作企業(yè)網站、行業(yè)門戶平臺等全方位的服務。

問題

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

思路

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

代碼

WeakTask.java

public class WeakTask extends AsyncTask {

  private WeakReference> listenerReference;

  public WeakTask(OnWeakTaskListener 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 {

  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(new LoginWeakTaskListener()).execute();
    } 
  }


  private class LoginWeakTaskListener implements OnWeakTaskListener{

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

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

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

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


本文名稱:Android中AsyncTask內存安全怎么用
文章地址:http://weahome.cn/article/gcicos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部