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

个人 可以做网站备案吗软文范文200字

个人 可以做网站备案吗,软文范文200字,盐城做网站的,接项目的网站开发pb桌面程序Lifycycle 其实是用观察者模式实现的,当 Activity 生命周期变化的时候,通知相应的 Observers 即观察者 代码很简单: //1、继承 AppCompatActivity //2、订阅 状态变化 addObserver public class MainActivity extends AppCompatActivity {O…

Lifycycle 其实是用观察者模式实现的,当 Activity 生命周期变化的时候,通知相应的 Observers 即观察者

代码很简单:

//1、继承 AppCompatActivity
//2、订阅 状态变化 addObserver
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {...//Lifecycle可以同时发送事件给多个下游,这里有两个下游观察者getLifecycle().addObserver(new MyObserver());//GenericLifecycleObserver 虽然被限制了使用范围,报红,但还是可以用//DefaultLifecycleObserver 要 minSdkVersion 》=24 才可以使用getLifecycle().addObserver(new GenericLifecycleObserver() {@Overridepublic void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {Log.w(TAG, "onStateChanged: event =" + event+""+ ",thread is :"+ Thread.currentThread().getName());}});...}
}
 onCreate(),thread is :main当前生命周期状态=CREATEDonStateChanged: event =ON_CREATE,thread is :mainonStart(),thread is :main当前生命周期状态=STARTEDonStateChanged: event =ON_START,thread is :mainonResume(),thread is :main当前生命周期状态=RESUMEDonStateChanged: event =ON_RESUME,thread is :mainonChanged: networkInfo=[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "mobile3", failover: false, available: true, roaming: false, metered: false]onStateChanged: event =ON_PAUSE,thread is :mainonPause(),thread is :main当前生命周期状态=STARTEDonStateChanged: event =ON_STOP,thread is :mainonStop(),thread is :main当前生命周期状态=CREATEDonStateChanged: event =ON_DESTROY,thread is :mainonDestroy() ,thread is :main当前生命周期状态=DESTROYED

event ? 当前生命周期状态=CREATED? getLifecycle?? 这些是什么鬼,不急,先看两个基本概念

一、几个重要的类和接口。(粗粗看一下就行,一看代码就会用的)

  • Lifecycle
    Lifecycle是一个持有组件生命周期状态(如Activity或Fragment)的信息的类,并允许其他对象观察此状态。
  • Event :从框架和Lifecycle类派发的生命周期事件。这些事件映射到活动和片段中的回调事件。
  • State :由Lifecycle对象跟踪的组件的当前状态。
  • LifecycleOwner (重要)Lifecycle持有者
  • 实现该接口的类持有生命周期(Lifecycle对象),该接口的生命周期(Lifecycle对象)的改变会被其注册的观察者LifecycleObserver观察到并触发其对应的事件。
  • LifecycleObserver(重要)Lifecycle观察者
  • 实现该接口的类,通过注解的方式,可以通过被LifecycleOwner类的addObserver(LifecycleObserver o)方法注册,被注册后,LifecycleObserver便可以观察到LifecycleOwner的生命周期事件。

二、Lifecycle 主要用 State 和 Event 这两个枚举类来表达 Activity/Fragment 的生命周期和状态. LifecycleRegistry 是它的主要实现类,用于分发生命周期的变化.

State 和 Event 之间的关系用下图表示:

 

三、Lifycycle 的使用步骤

1、引入相关的依赖包
Lifecycle 已经是稳定版,它包含在 support library 26.1.0 及之后的依赖包中,如果我们的项目基于这些依赖包,那么不需要额外的引用。

// alternatively, just ViewModel
implementation "android.arch.lifecycle:viewmodel:1.1.0"
// alternatively, just LiveData
implementation "android.arch.lifecycle:livedata:1.1.0"
def lifecycle_version = "1.1.0"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
//使用这些类,要引入下面GenericLifecycleObserver,FullLifecycleObserver,DefaultLifecycleObserver
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

 

2、support library 26.1.0 之后,且继承 FragmentActivity(AppCompatActivity已经继承FragmentActivity),那么我们直接调用 getLifecycle().addObserver 方法即可,当 Activity 的生命周期变化的时候,将会回调 onStateChanged 的方法,状态分别是一一对应的。(请看文章开头的例子)

addObserver的使用

  1. 实现DefultLifecyceObserver接口,然后重写里面生命周期方法;
  2. 直接实现LifecycleObserver接口,然后通过注解的方式来接收生命周期的变化;

Lifecycle.java文档中是建议使用第一种方式,因为文档中说明了,随着Java8成为主流,注解的方式会被弃用。DefaultLifecycleObserver是需要另外声明的java8 比如下面
GenericLifecycleObserver,FullLifecycleObserver,DefaultLifecycleObserver 这三个接口都是直接或者间接继承的LifecycleObserver

 // 如果使用的是java 8要显示声明如下的
def lifecycle_version = "1.1.1"
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

这是DefultLifecyceObserver的代码,注意注释,注释写明了每个方法调用的时机

时机:

onCreate onStart onResume 都是 after
This method will be called after the {@link LifecycleOwner}'s {@code onCreate}
onPause onStop onDestroy 都是  before
This method will be called before the {@link LifecycleOwner}'s {@code onPause} method
package android.arch.lifecycle;import android.support.annotation.NonNull;/*** Callback interface for listening to {@link LifecycleOwner} state changes.* <p>* If you use Java 8 language, <b>always</b> prefer it over annotations.*/
@SuppressWarnings("unused")
public interface DefaultLifecycleObserver extends FullLifecycleObserver {/*** Notifies that {@code ON_CREATE} event occurred.* <p>* This method will be called after the {@link LifecycleOwner}'s {@code onCreate}* method returns.** @param owner the component, whose state was changed*/@Overridedefault void onCreate(@NonNull LifecycleOwner owner) {}/*** Notifies that {@code ON_START} event occurred.* <p>* This method will be called after the {@link LifecycleOwner}'s {@code onStart} method returns.** @param owner the component, whose state was changed*/@Overridedefault void onStart(@NonNull LifecycleOwner owner) {}/*** Notifies that {@code ON_RESUME} event occurred.* <p>* This method will be called after the {@link LifecycleOwner}'s {@code onResume}* method returns.** @param owner the component, whose state was changed*/@Overridedefault void onResume(@NonNull LifecycleOwner owner) {}/*** Notifies that {@code ON_PAUSE} event occurred.* <p>* This method will be called before the {@link LifecycleOwner}'s {@code onPause} method* is called.** @param owner the component, whose state was changed*/@Overridedefault void onPause(@NonNull LifecycleOwner owner) {}/*** Notifies that {@code ON_STOP} event occurred.* <p>* This method will be called before the {@link LifecycleOwner}'s {@code onStop} method* is called.** @param owner the component, whose state was changed*/@Overridedefault void onStop(@NonNull LifecycleOwner owner) {}/*** Notifies that {@code ON_DESTROY} event occurred.* <p>* This method will be called before the {@link LifecycleOwner}'s {@code onStop} method* is called.** @param owner the component, whose state was changed*/@Overridedefault void onDestroy(@NonNull LifecycleOwner owner) {}
}

 

3、要保证在Activity或者Fragment的有效生命周期内进行的操作,所以必须判断,当前lifecycle的状态是否至少是CREATED状态,避免Activity或者fragment销毁了以后,回调或者网络请求才回来,此时做一些操作会导致异常。

添加以下代码,就是我们把lifecycle对象传给观察者,让它自己去判断回调后的代码,保证至少是CREATED状态

 private Lifecycle lifecycle;public MyObserver(Lifecycle lifecycle) {this.lifecycle = lifecycle;}
//然后再相应的回调方法中使用下面代码判断,保证数据回调回来,当前activity是存在的if (lifecycle.getCurrentState().isAtLeast(CREATED)) {//这里只是示例,不一定是CREATED}

 

4、Lifecycle 实战例子:

MediaCompoment 在 Activity ondestroy 的时候,我们需要销毁一些资源,用传统的方法,我们需要在 Activity onDestroy 的时候手动调用 onDestroy 方法。这样会存在一个问题,调用者必须知道比较清楚得知道 MediaCompoment 的设计,否则可能会忘记调用 onDestroy 的方法。

那有没有一种方法, 当 Activity 生命周期变化的时候,MediaCompoment 自身能够检测到 Activity 的 生命周期变化,从而做相应的处理。

答案当然是有的,使用 lifycycle。(LifecycleOwner是lifycycle的拥有者)

public class MediaCompoment {private static final String TAG = "MediaCompoment";private final LifecycleOwner mLifecycleOwner;public MediaCompoment(LifecycleOwner lifecycleOwner) {mLifecycleOwner = lifecycleOwner;mLifecycleOwner.getLifecycle().addObserver(new GenericLifecycleObserver() {@Overridepublic void onStateChanged(LifecycleOwner source, final Lifecycle.Event event) {if (event == Lifecycle.Event.ON_CREATE) {onCreate();} else if (event == Lifecycle.Event.ON_START) {onStart();} else if (event == Lifecycle.Event.ON_RESUME) {onResume();} else if (event == Lifecycle.Event.ON_PAUSE) {onPause();} else if (event == Lifecycle.Event.ON_STOP) {onStop();} else if (event == Lifecycle.Event.ON_DESTROY) {onDestroy();}}});}public void onCreate() {Log.d(TAG, "onCreate:");}public void onStart() {Log.d(TAG, "onStart:");}public void onResume() {Log.d(TAG, "onResume:");}public void onPause() {Log.d(TAG, "onPause:");}public void onStop() {Log.d(TAG, "onStop:");}public void onDestroy() {Log.d(TAG, "onDestroy:");}
}

参与文章

一、Android lifecycle 使用详解

二、Android 架构组件之 LifeCycle详解

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

相关文章:

  • 海尔集团电子网站建设线上教育培训机构十大排名
  • 手机端做的优秀的网站设计娱乐热搜榜今日排名
  • 网站建设需要工作计划百度seo价格
  • 西安网站建设招聘优帮云排名优化
  • 淘宝做网站 评价话语关键词挖掘查询工具
  • 自己建私人网站做外贸不好做谈谈你对网络营销的看法
  • 全网网站建设优化活动策划公司
  • 工商注册核名查询系统官网免费使用seo软件
  • 创建网站的准备wordpress自助建站
  • 网站建设方案策划北京疫情最新新闻
  • 建行官网网站2023年又封城了
  • dw做的网站如何让别人看看西安网站维护公司
  • 公司做网站需要discuz论坛seo设置
  • 网站流量怎么做成品网站货源1688在线
  • 杭州微跑网站建设公司2345浏览器网址导航
  • 政法网站内容建设以图搜图
  • wordpress模块化布局西安关键词优化服务
  • 小伙反串做直播视频网站新闻 近期大事件
  • 做a小视频免费观看网站上海专业的seo公司
  • 陕西煤炭建设公司网站南宁seo费用服务
  • 商城类网站如何众筹成都网多多
  • 新零售平台公司有哪些南宁seo咨询
  • 济南小程序网站开发知名seo公司
  • wordpress的分类idseo优化多久能上排名
  • 企业网站建设教程视频亿速云
  • 建设银行舟山分行网站网络推广营销方案100例
  • 政务网站建设工作总结深圳百度推广代理商
  • 廊坊建站服务如何自己创建一个网站
  • 一个人可以备案几个网站竞价服务托管公司
  • 软件技术就业前景怎么样兰州网络seo公司
  • Docker-07.Docker基础-数据卷挂载
  • LeetCode 132:分割回文串 II
  • sqli-labs-master/Less-31~Less-40
  • Spring Boot + ShardingSphere 分库分表实战
  • 嵌入式学习日志——数据结构(一)
  • 单位长度上的RC参数