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

Android 生命周期架構(gòu)組件使用方法

 更新時間:2018年02月10日 11:51:02   作者:非非白  
這篇文章主要介紹了 Android 生命周期架構(gòu)組件的使用方法,需要的朋友可以參考下

Support Library 26.1+ 直接支持生命周期架構(gòu)組件。使用該組件,Android 生命周期的夢魘已經(jīng)成為過去。再也不用擔(dān)心出現(xiàn) Can not perform this action after onSaveInstanceState 這樣的異常了。

筆者封裝了一個簡化使用該組件的輔助類,大約 70 行代碼:

public class LifecycleDelegate implements LifecycleObserver {
  private LinkedList<Runnable> tasks = new LinkedList<>();
  private final LifecycleOwner lifecycleOwner;
  public LifecycleDelegate(LifecycleOwner lifecycleOwner) {
    this.lifecycleOwner = lifecycleOwner;
    lifecycleOwner.getLifecycle().addObserver(this);
  }
  public void scheduleTaskAtStarted(Runnable runnable) {
    if (getLifecycle().getCurrentState() != Lifecycle.State.DESTROYED) {
      assertMainThread();
      tasks.add(runnable);
      considerExecute();
    }
  }
  @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
  void onStateChange() {
    if (getLifecycle().getCurrentState() == Lifecycle.State.DESTROYED) {
      tasks.clear();
      getLifecycle().removeObserver(this);
    } else {
      considerExecute();
    }
  }
  void considerExecute() {
    if (isAtLeastStarted()) {
      for (Runnable task : tasks) {
        task.run();
      }
      tasks.clear();
    }
  }
  boolean isAtLeastStarted() {
    return getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED);
  }
  private Lifecycle getLifecycle() {
    return lifecycleOwner.getLifecycle();
  }
  private void assertMainThread() {
    if (!isMainThread()) {
      throw new IllegalStateException("you should perform the task at main thread.");
    }
  }
  static boolean isMainThread() {
    return Looper.getMainLooper().getThread() == Thread.currentThread();
  }
}

在 Activity 或 Fragment 中這樣使用

private LifecycleDelegate lifecycleDelegate = new LifecycleDelegate(this);

然后在適當(dāng)?shù)臅r機(jī)調(diào)用 lifecycleDelegate.scheduleTaskAtStarted

該輔助類會檢查是否在主線程調(diào)用,以確保線程安全以及在主線程更新 UI。

總結(jié)

以上所述是小編給大家介紹的Android 生命周期架構(gòu)組件使用方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android 無預(yù)覽拍照功能

    Android 無預(yù)覽拍照功能

    最近小編接到一個項目,遇到這樣的需求,要求在后臺拍照并保存功能,也就是無預(yù)覽拍照功能,下面小編給大家?guī)砹藢嵗a,需要的朋友參考下
    2018-02-02
  • Android UI使用HorizontalListView實現(xiàn)水平滑動

    Android UI使用HorizontalListView實現(xiàn)水平滑動

    這篇文章主要為大家詳細(xì)介紹了Android UI使用HorizontalListView實現(xiàn)水平滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Kotlin中Object關(guān)鍵字的使用示例介紹

    Kotlin中Object關(guān)鍵字的使用示例介紹

    在Kotlin中object是一個特殊的關(guān)鍵字。主要用于聲明一個類的同時創(chuàng)建這個類的對象(例如單例)。在Kotlin中它有三個方面的應(yīng)用:對象表達(dá)式,對象聲明和伴生對象
    2022-09-09
  • arcgis android之地圖圖層切換

    arcgis android之地圖圖層切換

    本篇文章主要介紹了arcgis android之地圖圖層切換,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • WebView的幾個常見功能使用方法

    WebView的幾個常見功能使用方法

    本篇文章介紹了WebView的幾個常見功能,WebView的功能很強(qiáng)大,感興趣的小伙伴們可以了解一下。
    2016-11-11
  • Android checkbox的listView(多選,全選,反選)具體實現(xiàn)方法

    Android checkbox的listView(多選,全選,反選)具體實現(xiàn)方法

    由于listview的一些特性,剛開始寫這種需求的功能的時候都會碰到一些問題,重點(diǎn)就是存儲每個checkbox的狀態(tài)值,在這里分享出了完美解決方法:
    2013-06-06
  • Android實現(xiàn)動態(tài)定值范圍效果的控件

    Android實現(xiàn)動態(tài)定值范圍效果的控件

    這篇文中給大家分享一個Android的控件,這個控件實現(xiàn)是一個可以動態(tài)選擇定值范圍的效果,實現(xiàn)后的效果很不錯,對大家日常開發(fā)或許有所幫助,感興趣的朋友們可以一起來看看。
    2016-09-09
  • Android Studio實現(xiàn)長方體表面積計算器

    Android Studio實現(xiàn)長方體表面積計算器

    這篇文章主要為大家詳細(xì)介紹了Android Studio實現(xiàn)長方體表面積計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • RecyclerView的簡單使用

    RecyclerView的簡單使用

    這篇文章主要為大家詳細(xì)介紹了RecyclerView的簡單使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • android監(jiān)聽View加載完成的示例講解

    android監(jiān)聽View加載完成的示例講解

    今天小編就為大家分享一篇android監(jiān)聽View加載完成的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

荆门市| 洛南县| 武清区| 旅游| 高州市| 西和县| 江华| 富平县| 丰台区| 周口市| 祁东县| 贵州省| 周口市| 泸西县| 中山市| 策勒县| 成武县| 安化县| 搜索| 托克托县| 涞源县| 水富县| 怀柔区| 平凉市| 龙海市| 湘潭县| 贡觉县| 泰州市| 岳阳市| 沾化县| 江西省| 连平县| 得荣县| 蒲江县| 康保县| 麻栗坡县| 读书| 资溪县| 教育| 阿拉善左旗| 邢台县|