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 -> " + "");
}
}
複製程式碼