Lifecycle介紹
Lifecycle是Google推出的JetPack框架組件的一個(gè),主要是用來(lái)感知Activity和Fragment的生命周期攻询,可以幫你寫出更簡(jiǎn)潔,通用的代碼亚再。
LifeCycle使用
總共兩步
-
第一步告喊,編寫自己的Observer類文件,并實(shí)現(xiàn)對(duì)應(yīng)的監(jiān)聽方法惜索,通過(guò)注解實(shí)現(xiàn)對(duì)響應(yīng)生命周期方法的監(jiān)聽特笋,代碼如下:
/** * 我們用這個(gè)觀查者來(lái)盯好需要感知生命周期的對(duì)象 */ public class MyLifeObserver implements LifecycleObserver { // OnLifecycleEvent()內(nèi)的注解Lifecycle.Event.XXX 對(duì)應(yīng)不同的生命周期方法,你可以根據(jù)需要監(jiān)聽不同的生命周期方法巾兆。 // 方法名可以隨意雹有,這里為了方便理解定義為onResumeListener()偿渡。 @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart(){ Log.i("Sven","onStart"); } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onPause(){ Log.i("Sven","onPause"); } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void destory(){ Log.i("Sven","onDestroy"); } }
-
第二步在被監(jiān)聽的Activity/Fragment內(nèi)注冊(cè):
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getLifecycle().addObserver(new MyLifeObserver()); } }
注意上面Activity代碼中,我們的Activit繼承了AppCompatActivity霸奕,AppCompatActivity和Fragment都實(shí)現(xiàn)了LifecycleOwner接口溜宽,所以可以直接拿來(lái)使用。如果你被監(jiān)控的Activity是自定義的Activity质帅,需要手動(dòng)繼承LifecycleOwner,并手動(dòng)在每個(gè)生命周期方法中做標(biāo)記适揉。
具體代碼如下:
public class MyActivity extends Activity implements LifecycleOwner { private LifecycleRegistry mLifecycleRegistry; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); //創(chuàng)建Lifecycle對(duì)象 mLifecycleRegistry = *new*LifecycleRegistry(this); //做標(biāo)記 mLifecycleRegistry.markState(Lifecycle.State.CREATED); //添加觀察者 getLifecycle().addObserver(new MyLifeObserver()); } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycleRegistry; } @Override public void onStart() { super.onStart(); //做標(biāo)記 mLifecycleRegistry.markState(Lifecycle.State.STARTED); } @Override protected void onResume() { super.onResume(); //做標(biāo)記 mLifecycleRegistry.markState(Lifecycle.State.RESUMED); } @Override protected void onDestroy() { super.onDestroy(); //做標(biāo)記 mLifecycleRegistry.markState(Lifecycle.State.DESTROYED); } }
總結(jié):
我們創(chuàng)建了Observer對(duì)象,然后將Observer的引用交給Lifecycle煤惩,在組件生命周期方法執(zhí)行時(shí)嫉嘀,調(diào)用Observer的相應(yīng)方法。我們使用Lifecycle真正的理由是Lifecycle類幫我們處理了大量的與宿主組件生命周期相關(guān)的問(wèn)題魄揉,使我們的代碼更簡(jiǎn)潔剪侮。專心處理業(yè)務(wù)邏輯即可。