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

Android 生命周期架構組件使用方法

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

Support Library 26.1+ 直接支持生命周期架構組件。使用該組件,Android 生命周期的夢魘已經成為過去。再也不用擔心出現(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);

然后在適當?shù)臅r機調用 lifecycleDelegate.scheduleTaskAtStarted

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

總結

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

相關文章

  • Android 無預覽拍照功能

    Android 無預覽拍照功能

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

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

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

    Kotlin中Object關鍵字的使用示例介紹

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

    arcgis android之地圖圖層切換

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

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

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

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

    由于listview的一些特性,剛開始寫這種需求的功能的時候都會碰到一些問題,重點就是存儲每個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)長方體表面積計算器

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

    RecyclerView的簡單使用

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

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

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

最新評論

嵊泗县| 庆城县| 冀州市| 南充市| 朝阳区| 丰城市| 定兴县| 逊克县| 大方县| 绩溪县| 喜德县| 濉溪县| 安龙县| 安丘市| 连山| 河间市| 神池县| 交口县| 绥宁县| 大足县| 外汇| 额济纳旗| 浮梁县| 墨竹工卡县| 菏泽市| 桐梓县| 全州县| 枝江市| 夹江县| 五河县| 泸溪县| 穆棱市| 大埔区| 磐安县| 田东县| 宿迁市| 三明市| 海伦市| 鄂伦春自治旗| 维西| 海晏县|