谷歌架構(gòu)組件(二)Lifecycle的使用與分析

前言

Lifecycle是谷歌推出的架構(gòu)組件之一, 實(shí)現(xiàn)主動響應(yīng)activity,fragment組件生命周期變化,幫助開發(fā)者生產(chǎn)組織良好的代碼,提供代碼的可維護(hù)性。

如何使用

新建observer類,使用注解方式觀察生命周期

public class MyObserver implements LifecycleObserver {  
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)  
    public void connectListener() {  
        ...  
    }  
  
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)  
    public void disconnectListener() {  
        ...  
        }  
} 

在activity 或fragment onCreate添加注冊

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

原理分析:

lifecycle.png

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

為代碼分析入口。

我們知道Fragments 和 Activities 在 Support Library 26.1.0以后實(shí)現(xiàn)了LifecycleOwner接口。

    public interface LifecycleOwner {  
        /** 
         * Returns the Lifecycle of the provider. 
         * 
         * @return The lifecycle of the provider. 
         */  
        Lifecycle getLifecycle();  
    }

Fragments 和 Activity 持有LifecycleRegistry類的對象,而它是Lifecycle的具體實(shí)現(xiàn)類
··· java
public class Fragment implements LifecycleOwner{
LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

@Override  
public Lifecycle getLifecycle() {  
    return mLifecycleRegistry;  
}  

void performCreate(Bundle savedInstanceState) {  
       ......  
       mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);  
    }  
  
    void performStart() {  
        .......  
        mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);  
    }  
    .......  
} 

···
由Framework層的FragmentManger負(fù)責(zé)管理和執(zhí)行fragment的生命周期函數(shù)performCreate()等

我們再分析下LifecycleRegistry核心類。

LifecycleRegistry扮演Observable的角色,幫助activity,fragment管理維護(hù)所有的Observer。

public class LifecycleRegistry extends Lifecycle {  
  
      
private FastSafeIterableMap<LifecycleObserver, ObserverWithState> mObserverMap =  
            new FastSafeIterableMap<>();  
  
  
 @Override  
    public void addObserver(LifecycleObserver observer) {  
            ......  
        }  
      
      
        @Override  
        public void removeObserver(LifecycleObserver observer) {  
            
            mObserverMap.remove(observer);  
        }  
      
      
    }

總結(jié)

Lifecycle組件實(shí)現(xiàn)觀察者模式,使普通組件能夠主動響應(yīng)activity,fragment生命周期的變化,使activity fragment等UI controllers保持精簡,提高代碼的可維護(hù)性。

參考:

https://developer.android.google.cn/topic/libraries/architecture/lifecycle.html#use-cases

android 8.0 source code

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容