Lifecycle-library-stable

972 阅读1分钟

Google 最近发布了稳定Lifecyclelibrary。笔者认为:如果你正在使用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 -> " + "");
    }
}