当前位置: 首页 > news >正文

国内新闻最近新闻今天aso优化排名

国内新闻最近新闻今天,aso优化排名,wordpress登录qq微信登录,织梦cms建设企业网站前言 2018 年的 Google I/O 大会上,Google 发布了 Android Jetpack,并称其为下一代的 Android 组件,旨在帮助开发者加快应用开发速度。准确来讲,Jetpack 是一系列 Android 软件组件的集合,它包括基础组件、架构组件、行…

前言

2018 年的 Google I/O 大会上,Google 发布了 Android Jetpack,并称其为下一代的 Android 组件,旨在帮助开发者加快应用开发速度。准确来讲,Jetpack 是一系列 Android 软件组件的集合,它包括基础组件、架构组件、行为组件、界面组件。其中的 Android Architecture Components 指的就是这里的 “架构组件”。

Android Architecture Components 是 Google 推荐的一个构建 APP 的应用架构,它包含了一些列架构相关组件。而本篇文章我们要介绍的 Lifecycle 就是其中的一个与生命周期相关的库,同时,Lifecycle 也跟 LiveData 和 ViewModel 两个库紧密联系,想要搞懂后两者,就必须先搞懂它。

具体各组件之间的关系,以及各自在 Jetpack 中的地位,可以参见下面两幅来源于官网的图片。

Lifecycle 的作用

Lifecycle 是具有生命周期感知能力的组件,也就是说,我们能在 Activity 或者 Fragment 的生命周期发生变化的时候得到通知。我们往往会在 Activity 的各种生命中周期方法里执行特定的方法,比如,进行广播的注册和解绑、Eventbus 的注册和解绑等:

public class TestActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);}@Overrideprotected void onStart() {super.onStart();EventBus.getDefault().register(this);}@Overrideprotected void onDestroy() {EventBus.getDefault().unregister(this);super.onDestroy();}
}

如果我们把很多这种需要跟生命周期相关的逻辑代码都直接放在 Activity 的生命周期方法中,Activity 将会变得难以维护。通过 Lifecycle,我们就能通过把这些逻辑抽离出来,进而避免这种问题。因为本质上我们需要的只是 Activity 或者 Fragment 的生命周期发生改变的时候能通知到我们,以便我们在对应生命周期中执行对应的方法。

Lifecycle 的基本使用

2.0、 导入 Lifecycle 依赖

Lifecycle 被包含在 support library 26.1.0 及之后的依赖包中,如果我们的项目依赖的支持库版本在 26.1.0及以上,那么不需要额外导入 Lifecycle 库,本篇例子中使用的支持库是 28.0.0 :

    implementation 'com.android.support:appcompat-v7:28.0.0'

如果支持库版本小于 26.1.0 ,就需要单独导入 Lifecycle 库 :

    implementation "android.arch.lifecycle:runtime:1.1.1"

当然,如果项目已经迁移到了 AndroidX,可以使用下面的方式引入 :

    implementation "androidx.lifecycle:lifecycle-runtime:2.0.0"

还是建议大家尝试尽快把项目迁移为 AndroidX,因为很多更新,会最先在 AndroidX 中发布,逐渐摆脱传统的support包。比如这里要讲的 Lifecycle 在 AndroidX 中已经升级到了 2.x 版本,而支持库中还是 1.x 版本。

鉴于支持库一般都在 26.1.0 以上,并且尚有大部分用户未迁移到AndroidX,在本篇文章中,我们使用 support library 28.0.0 中默认包含的 Lifecycle 库。我们在项目的 app 目录下的 build.gradle 文件中添加以下依赖:

    implementation 'com.android.support:appcompat-v7:28.0.0'

以 support library 版本在 26.1.0 及以上为前提,这里我们分两种情况来讲。一种是我们创建的Activity 继承自 AppCompatActivity(以Activity 为例,Fragment类似),另一种是创建的 Activity 继承自普通的 Activity,而非 AppCompatActivity。

这里要先说一点, Lifecycle 的实现机制是观察者模式,意识到这点,再讲它的使用过程及原理就比较容易理解了。

整体流程:

  1. 构建一个 Lifecycle 对象(通过一个实现了 LifecycleOwner 接口的对象的 getLifecycle()方法返回),这个对象就是一个被观察者,具有生命周期感知能力
  2. 构建一个 LifecycleObserver 对象,它对指定的 Lifecycle 对象进行监听
  3. 通过将 Lifecycle 对象的 addObserver(...) 方法,将 Lifecycle 对象和 LifecycleObserver 对象进行绑定

2.1、 方式一:继承自 AppCompatActivity

首先,我们创建一个 MyObserver.java 类,让它实现 LifecycleObserver 接口( LifecycleObserver 接口是一个空接口,主要是给注解处理器使用),如下:

public class MyObserver implements LifecycleObserver {private static final String TAG = "MyObserver";// 使用注解  @OnLifecycleEvent 来表明该方法需要监听指定的生命周期事件@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)public void connectListener() {
//        ...Log.d(TAG, "connectListener:  --------   onResume" );}@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)public void disconnectListener() {
//        ...Log.d(TAG, "disconnectListener: -------   onPause");}
}

可以看到,我们通过在方法上使用@OnLifecycleEvent 注解使得该方法具有了生命周期感知能力。括号里面的参数,表明需要监听的是什么生命周期事件。Lifecycle 主要就是通过 EventState 这两个枚举类来跟踪所关联组件的生命周期状态。具体的 Event 和 State 之间的转换关系,可以参照下图:

接下来,让我们的 Activity 继承自 AppCompatActivity,然后在 onCreate(...) 方法中通过getLifecycle().addObserver(new MyObserver())完成 Lifecycle 和LifecycleObserver 的绑定。

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 就只需要这一行代码,简洁吧getLifecycle().addObserver(new MyObserver());}
}

然后我们就可以运行下程序,跑起来之后按 Home 键或者按返回键进行操作。能看到,随着生命周期的变化,MyObserver() 中定义的方法在控制台中也被正确地打印了出来。

是不是觉得特别简单。

但之所以毫不费力,是因为有人替你“负重前行”。在 support library 26.1.0 及以后的支持库中,AppCompatActivity 的祖先类 SupportActivity已经默认实现了 LifecycleOwner 接口,通过其 getLifecycle() 方法可以直接返回一个 Lifecycle 对象。之后我们就可以通过该对象的 addObserver(...) 方法将 Lifecycle 跟指定的 LifecycleObserver 进行绑定。

2.2、 方式二:继承自普通的 Activity

首先,我们仍然需要像上面的方式,来创建一个MyObserver 对象。

这次我们创建一个继承自普通的 Activity 的 Activity ,那自然无法直接使用 getLifecycle() 方法来获取 Lifecycle 。无法直接使用,那我们能否模仿 AppCompatActivity的实现,来自己创建 Lifecycle 对象呢?当然可以。这时候,我们就需要自己实现LifecycleOwner接口,并在具体的生命周期下通过 LifecycleRegistrymarkState(...)方法来主动进行事件的分发。请看下面改造过的 MainActivity.java 代码 :

public class MainActivity extends Activity implements LifecycleOwner {private LifecycleRegistry mLifecycleRegistry;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLifecycleRegistry = new LifecycleRegistry(this);getLifecycle().addObserver(new MyObserver());mLifecycleRegistry.markState(Lifecycle.State.CREATED);}@Overrideprotected void onResume() {super.onResume();mLifecycleRegistry.markState(Lifecycle.State.RESUMED);}@Overrideprotected void onPause() {super.onPause();mLifecycleRegistry.markState(Lifecycle.State.STARTED);}@NonNull@Overridepublic Lifecycle getLifecycle() {return mLifecycleRegistry;}
}

然后运行代码,发现结果和上面的完全一样。

可以看到,MainActivity实现了LifecycleOwner接口(实现该接口的对象,即是 Lifecycle 的持有者),并在其 getLifecycle( ) 方法中返回了一个 LifecycleRegistry对象,而 LifecycleRegistry 是 Lifecycle 的实现类,能处理多个 Observer,我们自定义 LifecycleOwner的时候就可以直接使用它。其他使用方式,则完全相同。

为了让使用更加方便灵活,Lifecycle 还提供了查询当前组件所处的生命周期状态的方法:

lifecycle.getCurrentState().isAtLeast(STARTED)

总结

  1. 实现了 LifecycleObserver 接口的类可以和实现了 LifecycleOwner 接口的类无缝工作,因为 LifecycleOwner 可以提供一个 Lifecycle 对象,而 LifecycleObserver 就正需要对这个 Lifecycle 对象进行监听呢。
  2. LifecycleOwner 是从特定的类(比如 Activity 或者 Fragment 等)中抽象出来的Lifecycle 的持有者。
  3. LifecycleRegistry 是 Lifecycle 的实现类,用于注册和反注册那些需要监听当前组件生命周期的 LifecycleObserver

注意

从 1.0.0-rc1 版本的 Lifecycle 包开始,当 Activity 的 onSaveInstanceState() 方法调用结束之后,Lifecycle 将立刻被标记为 CREATEDON_STOP ,而不是等 onStop() 方法调用结束。这点和 API level 26 或者更低版本上 Activity 的生命周期的调用顺序并不匹配,需要稍加注意。有具体需求的可以进一步查阅相关文档。

更多最新消息,欢迎关注我的公众号获取:

http://www.lbrq.cn/news/2743543.html

相关文章:

  • 泰安建设网站短视频运营方案策划书
  • 黑龙江省seo网络营销案例分析
  • 网站建设 风险seo全网图文推广
  • 做营销网站国外最好的免费建站
  • 598网站建设想要网站导航正式推广
  • 山东企业网站建设公司泰州网站整站优化
  • cms做网站不用后端关键词优化需要从哪些方面开展
  • 网站登不上去的原因百度seo优化哪家好
  • 网站开发原则百度的合作网站有哪些
  • 简历制作免费模板网站企业邮箱怎么开通注册
  • 有域名 空间如何建网站广告推广方案怎么写
  • 内部网站建设、开源crm系统
  • 商城网站 备案seo搜索优化怎么做
  • 做线下极限运动的网站邵阳seo优化
  • 网站模板加后台软文推广是什么意思?
  • 山东宏远建设有限公司网站湖南 seo
  • 网站弹出框怎么做免费的seo优化
  • 安庆市城乡建设网站app代理推广平台
  • 网站建设中 倒计时5118关键词挖掘工具
  • 设计网络网站建设做网站需要多少钱 都包括什么
  • 网站建设设集客营销软件
  • 网站界面设计考试网站设计方案
  • 电商网站建设实训报告心得成品网站货源1688在线
  • 杭州网站开发平均工资常德今日头条新闻
  • 大学生做偷拍视频网站关于进一步优化落实疫情防控措施
  • 做课题的网站有多少是备案的廊坊seo优化
  • 网站建设服务器选择免费seo诊断
  • 安卓开发者平台站长工具seo词语排名
  • 黑彩网站自己可以做么浑江区关键词seo排名优化
  • python培训视频seo网站快速整站优化技术
  • FX10/20 (CYUSB401X)开发笔记5 固件架构
  • 【Html网页模板】赛博朋克数据分析大屏网页
  • 要想在Trae运行Java程序,该怎样配置Java环境?
  • 【嵌入式C语言】六
  • bev 感知算法 近一年来的新进展
  • 【LeetCode题解】LeetCode 35. 搜索插入位置