移动架构44_Lifecycle与生命周期
创始人
2025-05-30 11:57:59
0

Android移动架构汇总​​​​​​​

文章目录

  • 引子
  • 一 什么是Lifecycle?
  • 二 项目中添加Lifecycle
  • 三 简单使用
  • 四 自定义LifecycleOwner

引子

APP 启动页定义一个定时器,一段时间后自动进入主页或者点击按钮立即跳转主页,退出页面时取消定时器;普通页面请求中,退出页面取消订阅防止内存泄露我们在页面启动或者显示时启动任务,在页面暂停或退出时停止或取消任务,即在页	面的不同生命周期去执行不同操作,通常是在onPause、onDestroy中去手动执行调用(比如取消订阅网络请求),当与生命周期相关联的方法越来越多,代码实现越复杂,业务的改动就会导致Activity的处理逻辑难以维护。此时需要一个组件,当Activity生命周期方法执行时,使得对应的逻辑主动执行。

一 什么是Lifecycle?

Lifecycle是Jetpack架构组件中用来感知生命周期的组件,使用Lifecycle可以是的与生命周期相关的代码更简洁、易维护。

二 项目中添加Lifecycle

implementation “android.arch.lifecycle:runtime:1.1.1”
annotationProcessor “android.arch.lifecycle:compiler:1.1.1”

annotationProcessor为了进行预处理,生成以“类名_LifecycleAdapter”命名的类,将各种回调方法直接进行逻辑转换,避免反射,提高性能

三 简单使用

  1. 实现LifecycleObserver接口(Activity或Fragment已实现LifecycleOwner)
  2. 添加生命周期注解@OnLifecyclecycleEvent 或者代码监听
  3. Activity中addObserver注册
/**1. 移动架构44_Lifecycle与生命周期2.  3. 因为ComponentActivity、FragmentActivity的的父类SupportActivity、android.support.v4.app.Fragment 均实现了 LifecycleOwner接口,getLifecycle是接口的方法,所以可以进行注册4. */
public class LifecycleActivity extends AppCompatActivity {private static final String TAG = "LifecycleActivity";@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_lifecycle);getLifecycle().addObserver(new MyObserver());}public class MyObserver implements LifecycleObserver {@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)public void onCreate() {Log.i(TAG, "Lifecycle onCreate生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_START)public void onStart() {Log.i(TAG, "Lifecycle onStart生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)public void onResume() {Log.i(TAG, "Lifecycle onResume生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)public void onPause() {Log.i(TAG, "Lifecycle onPause生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_STOP)protected void onStop() {Log.i(TAG,"Lifecycle onStop生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)public void onDestory() {Log.i(TAG, "Lifecycle onDestory生命周期");}}
}

四 自定义LifecycleOwner

  1. 实现LifecycleOwner接口
  2. 设置状态
  3. 监听使用
public class UserDefinedLifecycleActivity  extends Activity implements LifecycleOwner,View.OnClickListener {private static final String TAG = "UserDefinedLifecycle";private LifecycleRegistry lifecycleRegistry;private  Risk risk;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_user_defined_lifecycle);lifecycleRegistry = new LifecycleRegistry(this);lifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);// 第一种:直接监听getLifecycle().addObserver(new LifecycleEventObserver() {@Overridepublic void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {Log.i(TAG, "onStateChanged event ="+event.name());}});// 第二种:注解监听getLifecycle().addObserver(new MyObserver());}@Overrideprotected void onResume() {super.onResume();//  注意:设置了onResume ,ON_PAUSE、onDestroy会执行,注意注册和使用lifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);}@Overrideprotected void onDestroy() {super.onDestroy();lifecycleRegistry.setCurrentState(Lifecycle.State.DESTROYED);}@NonNull@Overridepublic Lifecycle getLifecycle() {return lifecycleRegistry;}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.tv_start:risk.startRisk();break;case R.id.tv_end:risk.stopRisk();break;default:break;}}public class MyObserver implements LifecycleObserver {@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)public void onCreate() {Log.i(TAG, "Lifecycle onCreate生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)public void onResume() {Log.i(TAG, "Lifecycle onResume生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)public void onPause() {Log.i(TAG, "Lifecycle onPause生命周期");}@OnLifecycleEvent(Lifecycle.Event.ON_STOP)protected void onStop() {Log.i(TAG,"Lifecycle onStop生命周期 LifecycleRegistry没有设置,但是会调用");}@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)public void onDestory() {Log.i(TAG, "Lifecycle onDestory生命周期");}}
}

注意:

  1. 不一定局限Activity和Fragment,有生命周期的类都可实现LifecycleOwner
  2. onCreate、onDestroy对应,onCreate执行过了,onDestroy没执行,onCreate不会重复执行,那么多次setCurrentState
  3. 注册了onResume,onStop哪怕没注册,也会收到事件

相关内容

热门资讯

最新或2023(历届)可爱的小...  我爱养了一只可爱的小仓鼠。  小仓鼠的毛是黄色的,所以我就叫它布丁。 布丁小小的,还没有我的小拳头...
表扬就能培养孩子自信? 认可表... 嘉宾  奚林明,中共党员。1984年6月毕业于上海师范大学化学系本科,化学高级教师。最新或2023(...
最新或2023(历届)自己的事...  我有一个我非常喜欢的弹力球。早上,一不小心我把它弄到了洗衣机后面,这下可把我急坏了。我试着把洗衣机...
最新或2023(历届)妈妈去开... 今天一大早,妈妈就去开家长会了。到了中午该吃饭的时候,妈妈还没回来。我有点担心了,老师不会把妈妈单独...
最新或2023(历届)制作心理...  这周末,老师给我们布置了一项特别的任务——制作手抄报!这是一个关于心理健康的手抄报,因为这周是心理...
分布式网关概念及Spring ... 服务网关作为分布式系统对外服务的统一入口,设计功能上具有路由转发、熔断限流、安全认证以...
DETR源码学习(一)之网络模... 这篇文章主要为记录DETR模型的构建过程 首先明确DETR模型的搭建顺序:首先是bac...
最新或2023(历届)可爱的小...  我家养了四头可爱的小金鱼,它们身披金色的鱼鳞,放在一个长方形的鱼缸里,游来游去。  它们看到人站在...
最新或2023(历届)老师谢谢...  今天上语文课,孙老师讲的是《找骆驼》,这一节课,我又没有主动举手回答。最后,孙老师问:“通过学习这...
最新或2023(历届)安全很重... 今天的社区长跑,我们班发生了一起流血事件,通过这件事,我  把安全,更加牢牢地印在了自己的的脑海中。...
最新或2023(历届)我眼中的... 一年有春、夏、秋、冬四个季节。如果你要问我到底最喜欢么季节,那一定是寒冷的冬天。  冬天是快乐的。下...
最新或2023(历届)我家的小...  我家养了两只小乌龟,它们生活在鱼缸中。小乌龟的头是三角形的,两侧长着圆溜溜的小眼睛,非常有神,看起...
最新或2023(历届)和爸爸打... 这几天,我突发奇想要打羽毛球,今天,我和爸爸就到羽毛球场上一决胜负。  我以前练过羽毛球,可是一开始...
最新或2023(历届)自己学做...  我一直想自己学做菜,今天终于有机会了。  今天中午妈妈刚要做饭的时候,我就自告奋勇地对妈妈说:’今...
最新或2023(历届)和老奶奶...   吃完晚饭后,妈妈带着我上街买水果。当我们走到博物馆,阵阵悠扬的音乐从远处飘来,我走近一看,闪烁的...
使用Hexo+Github搭建... 准备工作:本地需要安装Git,Node.js环境,GitH...
最新或2023(历届)优秀小学...  小时候,我常随父母回老家玩儿,老家有好多动物,什么小猫、小狗、小牛、小鸡和小羊等,多得不可计数。有...
最新或2023(历届)忐忑抽背... 星期五下午,阳光火辣辣的让人十分刺眼,寒风“呼呼”地刮过,让人感觉到一丝寒意,一定是个不好的征兆了…...
最新或2023(历届)五年级日... 8月15日星期三天气晴  今天,阳光明媚,万里无云。我和妈妈、妹妹、舅舅、舅妈,一起去一条神秘的小溪...
最新或2023(历届)优秀五年...  今天,妈妈留我一个人在家,我约了我的好朋友朱相艺来家里玩,因为准备期末考试,我们可是有一个多月没见...