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

首頁 > 系統 > Android > 正文

淺談Android AsyncTask內存安全的一種使用方式

2019-12-12 00:36:01
字體:
來源:轉載
供稿:網友

問題

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

思路

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

代碼

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) {       ...結果返回后處理    }  }}

結論

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延寿县| 广西| 高碑店市| 白沙| 新建县| 拉孜县| 肇东市| 广州市| 清水县| 乐清市| 荔浦县| 奉节县| 斗六市| 嘉荫县| 松原市| 安康市| 乳山市| 肇东市| 金阳县| 翁源县| 清水县| 左权县| 炎陵县| 宜川县| 新乡市| 射洪县| 山西省| 丰镇市| 呼伦贝尔市| 平潭县| 宜黄县| 洛阳市| 凤冈县| 灵璧县| 容城县| 胶南市| 林州市| 监利县| 桑日县| 五华县| 栖霞市|