欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

然后在適當的時機調用 lifecycleDelegate.scheduleTaskAtStarted

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

總結

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

相關文章

  • Android使用URL讀取網絡資源的方法

    Android使用URL讀取網絡資源的方法

    這篇文章主要為大家詳細介紹了Android使用URL讀取網絡資源的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • RecyclerView的使用之多種Item加載布局

    RecyclerView的使用之多種Item加載布局

    本文給大家介石介紹下如何利用RecyclerView實現多Item布局的加載,多Item布局的加載的意思就是在開發(fā)過程中List的每一項可能根據需求的不同會加載不同的Layout
    2016-03-03
  • Android內部存儲改變讀取權限的方法

    Android內部存儲改變讀取權限的方法

    今天小編就為大家分享一篇Android內部存儲改變讀取權限的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Kotlin類對象class初始化與使用

    Kotlin類對象class初始化與使用

    Kotlin 是一種追求簡潔的語言,在類上也下了不少功夫,放棄了很多c++ 中類非常復雜的概念,其實對于類可以這樣來理解,為了復用的方便性和完整性,我們把變量和函數組合在一起,形成了類的概念
    2022-12-12
  • 玩轉AppBarLayout實現更酷炫的頂部欄

    玩轉AppBarLayout實現更酷炫的頂部欄

    玩轉AppBarLayout,實現更酷炫的頂部欄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android高級xml布局之輸入框EditText設計

    Android高級xml布局之輸入框EditText設計

    這篇文章主要為大家詳細介紹了Android高級xml布局之輸入框EditText設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • android實現音樂播放器

    android實現音樂播放器

    這篇文章主要為大家詳細介紹了android實現音樂播放器,擁有播放、暫停、重新播放和停止等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Android編程實現屏幕自適應方向尺寸與分辨率的方法

    Android編程實現屏幕自適應方向尺寸與分辨率的方法

    這篇文章主要介紹了Android編程實現屏幕自適應方向尺寸與分辨率的方法,涉及Android屏幕分辨率、布局、橫豎屏切換等相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • Android使用Jetpack Compose開發(fā)零基礎起步教程

    Android使用Jetpack Compose開發(fā)零基礎起步教程

    Jetpack Compose是用于構建原生Android UI的現代工具包。Jetpack Compose使用更少的代碼,強大的工具和直觀的Kotlin API,簡化并加速了Android上的UI開發(fā)
    2023-04-04
  • Android編程滑動效果之倒影效果實現方法(附demo源碼下載)

    Android編程滑動效果之倒影效果實現方法(附demo源碼下載)

    這篇文章主要介紹了Android編程滑動效果之倒影效果實現方法,基于繼承BaseAdapter自定義Gallery和ImageAdapter實現倒影的功能,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-02-02

最新評論