最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年08月09日 09:38:19   作者:pgydbh  
這篇文章主要介紹了淺談Android AsyncTask內(nèi)存安全的一種使用方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

問(wèn)題

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

思路

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

代碼

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() {
       ...開(kāi)始前
    }

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

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

結(jié)論

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android高級(jí)開(kāi)發(fā)之性能優(yōu)化典范

    Android高級(jí)開(kāi)發(fā)之性能優(yōu)化典范

    本文從電量,視圖,內(nèi)存三個(gè)性能方面的知識(shí)點(diǎn)給大家介紹android高級(jí)開(kāi)發(fā)之性能優(yōu)化的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2016-05-05
  • Android本地存儲(chǔ)方法淺析介紹

    Android本地存儲(chǔ)方法淺析介紹

    這篇文章主要介紹了Android本地存儲(chǔ)案例,方法簡(jiǎn)單可以實(shí)現(xiàn)存儲(chǔ)并達(dá)到節(jié)省內(nèi)存的效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • Android的Glide庫(kù)加載圖片的用法及其與Picasso的對(duì)比

    Android的Glide庫(kù)加載圖片的用法及其與Picasso的對(duì)比

    這篇文章主要介紹了Android的Glide庫(kù)加載圖片的用法及其與Picasso的對(duì)比,Glide的加載gif圖片的功能和性能受到了很多開(kāi)發(fā)者的青睞,需要的朋友可以參考下
    2016-04-04
  • Android RecyclerView多類(lèi)型布局卡片解決方案

    Android RecyclerView多類(lèi)型布局卡片解決方案

    這篇文章主要介紹了Android RecyclerView多類(lèi)型布局卡片解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Android中TabLayout結(jié)合ViewPager實(shí)現(xiàn)頁(yè)面切換

    Android中TabLayout結(jié)合ViewPager實(shí)現(xiàn)頁(yè)面切換

    這篇文章主要為大家詳細(xì)介紹了Android中TabLayout結(jié)合ViewPager實(shí)現(xiàn)頁(yè)面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android獲取SHA1的方法

    Android獲取SHA1的方法

    這篇文章主要介紹了Android獲取SHA1的方法,需要的朋友可以參考下
    2017-12-12
  • Android軟鍵盤(pán)狀態(tài)彈出與消失的示例

    Android軟鍵盤(pán)狀態(tài)彈出與消失的示例

    這篇文章主要介紹了本篇文章主要介紹了Android軟鍵盤(pán)狀態(tài)彈出與消失的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 使用 Lambda 取代 Android 中的匿名類(lèi)

    使用 Lambda 取代 Android 中的匿名類(lèi)

    本文主要介紹使用Lambda 取代 Android 中的匿名類(lèi)的資料,這里這里了相關(guān)資料及簡(jiǎn)單示例代碼幫助大家學(xué)習(xí)參考此部分的知識(shí),有需要的小伙伴可以參考下
    2016-09-09
  • Android筆記之:深入為從右向左語(yǔ)言定義復(fù)雜字串的詳解

    Android筆記之:深入為從右向左語(yǔ)言定義復(fù)雜字串的詳解

    本篇文章是對(duì)Android中為從右向左語(yǔ)言定義復(fù)雜字串進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android實(shí)現(xiàn)高德地圖首頁(yè)效果(上)

    Android實(shí)現(xiàn)高德地圖首頁(yè)效果(上)

    這篇文章主要為大家詳細(xì)介紹了基于Android實(shí)現(xiàn)高德地圖首頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-08-08

最新評(píng)論

宝鸡市| 临漳县| 鹤壁市| 昭平县| 巩留县| 海安县| 横峰县| 上林县| 扶沟县| 靖西县| 富宁县| 织金县| 凤山市| 察雅县| 噶尔县| 金川县| 阳谷县| 龙游县| 如皋市| 北辰区| 深州市| 遂溪县| 伊春市| 乡城县| 通榆县| 滦平县| 增城市| 闵行区| 德阳市| 章丘市| 青川县| 巴楚县| 芜湖县| 平罗县| 安庆市| 崇仁县| 华坪县| 清水河县| 原平市| 白山市| 平江县|