MVVM系列之一:Lifecycle,flutter开发视频播放器

// 替换 - 如果使用Java8,就用这个替换上面的lifecycle-compiler

implementation “androidx.lifecycle:lifecycle-common-java8:$lifecycle_version”

//以下按需引入

// 可选 - 帮助实现Service的LifecycleOwner

implementation “androidx.lifecycle:lifecycle-service:$lifecycle_version”

// 可选 - ProcessLifecycleOwner给整个 app进程 提供一个lifecycle

implementation “androidx.lifecycle:lifecycle-process:$lifecycle_version”

// 可选 - ReactiveStreams support for LiveData

implementation “androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version”

// 可选 - Test helpers for LiveData

testImplementation “androidx.arch.core:core-testing:$arch_version”

}

看着有很多,实际上如果只使用Lifecycle,只需要引入lifecycle-runtime即可。但通常都是和 ViewModel、 LiveData 配套使用的,所以lifecycle-viewmodel、lifecycle-livedata 一般也会引入。

另外,lifecycle-process是给整个app进程提供一个lifecycle,会面也会提到。

2.2.2 使用方法

Lifecycle的使用很简单:

  • 1、生命周期拥有者 使用getLifecycle()获取Lifecycle实例,然后代用addObserve()添加观察者;

  • 2、观察者实现LifecycleObserver,方法上使用OnLifecycleEvent注解关注对应生命周期,生命周期触发时就会执行对应方法;

2.2.2.1 基本使用

在Activity(或Fragment)中 一般用法如下:

public class LifecycleTestActivity extends AppCompatActivity {

private String TAG = “Lifecycle_Test”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_lifecycle_test);

//Lifecycle 生命周期

getLifecycle().addObserver(new MyObserver());

Log.i(TAG, "onCreate: ");

}

@Override

protected void onResume() {

super.onResume();

Log.i(TAG, "onResume: ");

}

@Override

protected void onPause() {

super.onPause();

Log.i(TAG, "onPause: ");

}

}

Activity(或Fragment)是生命周期的拥有者,通过getLifecycle()方法获取到生命周期Lifecycle对象,Lifecycle对象使用addObserver方法 给自己添加观察者,即MyObserver对象。当Lifecycle的生命周期发生变化时,MyObserver就可以感知到。

MyObserver是如何使用生命周期的呢?看下MyObserver的实现:

public class MyObserver implements LifecycleObserver {

private String TAG = “Lifecycle_Test”;

@OnLifecycleEvent(value = Lifecycle.Event.ON_RESUME)

public void connect(){

Log.i(TAG, "connect: ");

}

@OnLifecycleEvent(value = Lifecycle.Event.ON_PAUSE)

public void disConnect(){

Log.i(TAG, "disConnect: ");

}

}

首先MyObserver实现了接口LifecycleObserver,LifecycleObserver用于标记一个类是生命周期观察者。 然后在connectListener()、disconnectListener()上 分别都加了@OnLifecycleEvent注解,且value分别是Lifecycle.Event.ON_RESUME、Lifecycle.Event.ON_PAUSE,这个效果就是:connectListener()会在ON_RESUME时执行,disconnectListener()会在ON_PAUSE时执行。

我们打开LifecycleTestActivity 然后退出,日志打印如下:

2020-11-09 17:25:40.601 4822-4822/com.hfy.androidlearning I/Lifecycle_Test: onCreate:

2020-11-09 17:25:40.605 4822-4822/com.hfy.androidlearning I/Lifecycle_Test: onResume:

2020-11-09 17:25:40.605 4822-4822/com.hfy.androidlearning I/Lifecycle_Test: connect:

2020-11-09 17:25:51.841 4822-4822/com.hfy.androidlearning I/Lifecycle_Test: disConnect:

2020-11-09 17:25:51.841 4822-4822/com.hfy.androidlearning I/Lifecycle_Test: onPause:

可见MyObserver的方法 确实是在对应关注的生命周期触发时调用。 当然注解中的value你也写成其它 你关注的任何一个生命周期,例如Lifecycle.Event.ON_DESTROY。

2.2.2.2 MVP架构中的使用

如果是 在MVP架构中,那么就可以把presenter作为观察者:

public class LifecycleTestActivity extends AppCompatActivity implements IView {

private String TAG = “Lifecycle_Test”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_lifecycle_test);

//Lifecycle 生命周期

// getLifecycle().addObserver(new MyObserver());

//MVP中使用Lifecycle

getLifecycle().addObserver(new MyPresenter(this));

Log.i(TAG, "onCreate: ");

}

@Override

protected void onResume() {

super.onResume();

Log.i(TAG, "onResume: ");

}

@Override

protected void onPause() {

super.onPause();

Log.i(TAG, "onPause: ");

}

@Override

public void showView() {}

@Override

public void hideView() {}

}

//Presenter

class MyPresenter implements LifecycleObserver {

private static final String TAG = “Lifecycle_Test”;

private final IView mView;

public MyPresenter(IView view) {mView = view;}

@OnLifecycleEvent(value = Lifecycle.Event.ON_START)

private void getDataOnStart(LifecycleOwner owner){

Log.i(TAG, "getDataOnStart: ");

Util.checkUserStatus(result -> {

//checkUserStatu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值