为了账号安全,请及时绑定邮箱和手机立即绑定

Android Architecture Components——Lifecycle

标签:
Android

一、前言

Android Architecture Components是谷歌在Google I/O 2017大会上发布一套帮助开发者解决Android架构设计的方案。主要包括两大块内容:
(1)生命周期相关的:Lifecycle-aware Components
(2)数据库解决方案:Room
主要架构如下图:


webp

image.png

其中有主要包含了以下几大组件:
Lifecycle、LiveData、ViewModel、Room。
下面逐一介绍每个组件:

二、Lifecycle  管理组件的生命周期

1.Lifecycle介绍

Lifecycle 是android.arch.lifecycle  包下各种类和相关接口,通过该Lifecycle 组件可以让开发者构建能够感知其他组件(主要是Activity,Fragment)的生命周期的变化。也就是说通过注册Lifecycle的类,可以监听Activity或者Fragment的生命周期的变化。

2.常规MVP的实现

在常规的MVP模式中我们监听Activity的生命周期一般是这样做的:
首先创建一个BaseActivityPresenter接口,定义相关生命周期需要回调的方法。

package com.jilian.androidarchitecture;public interface BaseActivityPresenter {    void onCreate();    void onStart();    void onResume();    void onPause();    void onStop();    void onDestroy();
}

创建ActivityPresenter类实现BaseActivityPresenter 接口,在对应的方法中打印。

package com.jilian.androidarchitecture;import android.util.Log;public class ActivityPresenter implements BaseActivityPresenter {    private static final String TAG = "ActivityPresenter";    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: " );
    }    @Override
    public void onStart() {
        Log.e(TAG, "onStart: " );
    }    @Override
    public void onResume() {
        Log.e(TAG, "onResume: " );
    }    @Override
    public void onPause() {
        Log.e(TAG, "onPause: " );
    }    @Override
    public void onStop() {
        Log.e(TAG, "onStop: " );
    }    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: " );
    }
}

创建需要监听的生命周期的Activity——MyActivity

package com.jilian.androidarchitecture;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;public class MyActivity extends AppCompatActivity {    private BaseActivityPresenter presenter;    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        presenter = new ActivityPresenter();
        presenter.onCreate();
    }    @Override
    protected void onResume() {        super.onResume();
        presenter.onResume();
    }    @Override
    protected void onPause() {        super.onPause();
        presenter.onPause();
    }    @Override
    protected void onStop() {        super.onStop();
        presenter.onStop();
    }    @Override
    protected void onDestroy() {        super.onDestroy();
        presenter.onDestroy();
    }
}

然后在MyActivity的各个生命周期方法中 调用presenter中的对应的方法,将数据进行打印

02-21 14:12:47.739 4328-4328/com.jilian.androidarchitecture E/ActivityPresenter: onCreate: 
02-21 14:12:47.744 4328-4328/com.jilian.androidarchitecture E/ActivityPresenter: onResume: 
02-21 14:12:49.488 4328-4328/com.jilian.androidarchitecture E/ActivityPresenter: onPause: 
02-21 14:12:49.903 4328-4328/com.jilian.androidarchitecture E/ActivityPresenter: onStop: 
02-21 14:12:49.904 4328-4328/com.jilian.androidarchitecture E/ActivityPresenter: onDestroy:

以上的做法确实可以实现对Activity的生命周期进行监听,但是当我们需要监听其他的Activity的时候,我们又需要在另外的一个Activity中的每一个生命周期方法调用presenter中的对应的方法。这样做会使得代码比较冗余。Lifecycle正是解决了该问题。

3. 使用 Lifecycle

我们创建一个ActivityLifeObserver,实现BaseActivityPresenter和LifecycleObserver接口。在对应方法中加上相应的  @OnLifecycleEvent注解,如@OnLifecycleEvent(Lifecycle.Event.ON_CREATE),就是监听Activity的onCreat方法。

package com.jilian.androidarchitecture;import android.arch.lifecycle.Lifecycle;import android.arch.lifecycle.LifecycleObserver;import android.arch.lifecycle.OnLifecycleEvent;import android.util.Log;public class ActivityLifeObserver implements BaseActivityPresenter, LifecycleObserver {    private static final String TAG ="ActivityLifeObserver" ;    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: " );
    }    @OnLifecycleEvent(Lifecycle.Event.ON_START)    @Override
    public void onStart() {
        Log.e(TAG, "onStart: " );
    }    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)    @Override
    public void onResume() {
        Log.e(TAG, "onResume: " );
    }    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)    @Override
    public void onPause() {
        Log.e(TAG, "onPause: " );
    }    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)    @Override
    public void onStop() {
        Log.e(TAG, "onStop: " );
    }    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: " );
    }
}

创建需要监听的Activity——LifecycleActivity,实现LifecycleOwner接口。然后注册我们创建的ActivityLifeObserver。

package com.jilian.androidarchitecture;import android.arch.lifecycle.Lifecycle;import android.arch.lifecycle.LifecycleOwner;import android.arch.lifecycle.LifecycleRegistry;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;public class LifecycleActivity extends AppCompatActivity implements LifecycleOwner {    private LifecycleRegistry registry;    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle);
        registry = new LifecycleRegistry(this);        //注册需要监听的 Observer
        registry.addObserver(new ActivityLifeObserver());
    }    @Override
    public Lifecycle getLifecycle() {        return registry;
    }
}

注册完之后就可以完美的监听LifecycleActivity 的生命周期的变化。

02-21 14:44:33.965 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onCreate: 
02-21 14:44:33.966 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onStart: 
02-21 14:44:33.969 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onResume: 
02-21 14:44:38.895 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onPause: 
02-21 14:44:39.340 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onStop: 
02-21 14:44:39.341 4328-4328/com.jilian.androidarchitecture E/ActivityLifeObserver: onDestroy:

从上面我们可以看到Lifecycle主要使用步骤:
1.创建ActivityLifeObserver,并在相应的方法中添加相应的注解,表明需要监听Activity生命周期的哪一个环节。
2.在Activity中注册ActivityLifeObserver,这样Activity生命周期的变化就能被ActivityLifeObserver感知。



作者:大熊啊啊啊
链接:https://www.jianshu.com/p/9ccbe6a502b1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消