Google 最近发布了稳定
Lifecycle
library。笔者认为:如果你正在使用alpha或者beta版本,以下内容可能对你有用。
Deprecated LifecycleActivity
在stable version 1.0.0 之前,LifeCycle Library 并没有实现 LifecycleOwner
这个接口,所以我们不得不让我们项目XXXActivity继承LifecycleActivity。笔者认为这样有一个毛病:该死的侵入性
但是,在stable version 1.0.0 之后,Google可能意识到这个问题,AppCompatActivity 已经实现了LifecycleOwner
接口,这样就可以直接继承原生的AppCompatActivity,然后使用它给你带了的功能体验
AppCompatActivity be good for you?
我按照官方文档建议,替换LifecycleAvtivity ,使用AppCompatActivity,代码如下:
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getLifecycle().addObserver(presenter);
}
}
复制代码
笔者提出几点注意事项
- support:appcompat-v7 版本一定要>=26.1.0。27.0.2 对应的lifecycle version == 1.0.3
- presenter 必须实现
LifecycleObserver
接口
Deprecated LifecycleRegistryOwner
如果你想自定义Lifecycle owner ,你应该实现 LifecycleOwner
,而不是LifecycleRegistryOwner
Just Demo
- build.gradle
appcompat 26.1.0 依旧使用的stable version 1.0.0, 可以考虑手动添加最新版本。 笔者尝试使用exclude 将appcompat中的lifecycle去掉,发现很多库(eg:recyclerview constrait-layout fragment ...)都依赖Lifecycle, 笔者便放弃了
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation "android.arch.lifecycle:runtime:1.0.3"
annotationProcessor "android.arch.lifecycle:compiler:1.0.3"
复制代码
- Activity
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getLifecycle().addObserver(presenter);
}
}
复制代码
- Observer
public class Presenter implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
public void onAny(LifecycleOwner owner, Lifecycle.Event event) {
Log.w("@@@@ L41", "Presenter onAny -> " + "");
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Log.w("@@@@ L41", "Presenter onCreate -> " + "");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.w("@@@@ L41", "Presenter onPause -> " + "");
}
}
复制代码