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 无预览拍照功能

    Android 无预览拍照功能

    最近小编接到一个项目,遇到这样的需求,要求在后台拍照并保存功能,也就是无预览拍照功能,下面小编给大家带来了实例代码,需要的朋友参考下
    2018-02-02
  • Android UI使用HorizontalListView实现水平滑动

    Android UI使用HorizontalListView实现水平滑动

    这篇文章主要为大家详细介绍了Android UI使用HorizontalListView实现水平滑动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Kotlin中Object关键字的使用示例介绍

    Kotlin中Object关键字的使用示例介绍

    在Kotlin中object是一个特殊的关键字。主要用于声明一个类的同时创建这个类的对象(例如单例)。在Kotlin中它有三个方面的应用:对象表达式,对象声明和伴生对象
    2022-09-09
  • arcgis android之地图图层切换

    arcgis android之地图图层切换

    本篇文章主要介绍了arcgis android之地图图层切换,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • WebView的几个常见功能使用方法

    WebView的几个常见功能使用方法

    本篇文章介绍了WebView的几个常见功能,WebView的功能很强大,感兴趣的小伙伴们可以了解一下。
    2016-11-11
  • Android checkbox的listView(多选,全选,反选)具体实现方法

    Android checkbox的listView(多选,全选,反选)具体实现方法

    由于listview的一些特性,刚开始写这种需求的功能的时候都会碰到一些问题,重点就是存储每个checkbox的状态值,在这里分享出了完美解决方法:
    2013-06-06
  • Android实现动态定值范围效果的控件

    Android实现动态定值范围效果的控件

    这篇文中给大家分享一个Android的控件,这个控件实现是一个可以动态选择定值范围的效果,实现后的效果很不错,对大家日常开发或许有所帮助,感兴趣的朋友们可以一起来看看。
    2016-09-09
  • Android Studio实现长方体表面积计算器

    Android Studio实现长方体表面积计算器

    这篇文章主要为大家详细介绍了Android Studio实现长方体表面积计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • RecyclerView的简单使用

    RecyclerView的简单使用

    这篇文章主要为大家详细介绍了RecyclerView的简单使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • android监听View加载完成的示例讲解

    android监听View加载完成的示例讲解

    今天小编就为大家分享一篇android监听View加载完成的示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09

最新评论