国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

淺談Android AsyncTask內(nèi)存安全的一種使用方式

2019-10-21 21:42:00
字體:
供稿:網(wǎng)友

問題

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

思路

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

代碼

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() {       ...內(nèi)部執(zhí)行    }    @Override    public void after(Integer integer) {       ...結(jié)果返回后處理    }  }}

結(jié)論

這幾天一直在看rxJava,也一直在思考為什么要學(xué)習(xí)rxJava,當(dāng)然,我感覺既然美其名曰觀察者模式,那么它應(yīng)該解決的問題主要在于,讓主線程中顯示的數(shù)據(jù)隨著子線程中的數(shù)據(jù)去刷新,之前看過Android官方的mvvm好像是使用了rxJava,嘗試著使用了rxJava感覺不到任何優(yōu)勢可言。如果后面有時間,會深入研究一下觀察者模式,之后再看看rxJava與rxAndroid,最近又到了秋招的時候,又一次面臨求職的難題。。。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 克拉玛依市| 延安市| 平遥县| 东城区| 郎溪县| 罗甸县| 滁州市| 大冶市| 合川市| 吴江市| 涟水县| 淮南市| 陇川县| 和顺县| 阳高县| 彭州市| 镇雄县| 三原县| 汤原县| 汉川市| 双辽市| 额济纳旗| 织金县| 姚安县| 富川| 包头市| 桂阳县| 南涧| 洪洞县| 肥西县| 克什克腾旗| 密山市| 夏河县| 万全县| 枣庄市| 西畴县| 资中县| 南漳县| 邳州市| 绍兴市| 尼玛县|