Glide是怎么和Activity的重要生命周期關聯(lián)的

Glide

Glide,它的with()方法有四、五個重載,分別可以傳入Context、Activity、FragmentActivity、v4包下的Fragment和app包下的Fragment。雖然有五種重載,但是最后只有兩種情況,即傳入Application類型的參數(shù),和傳入非Application類型的參數(shù)。

傳入Application的話,Glide的生命周期就和應用程序一樣了。應用程序退出,Glide就停止加載任務。

如果傳入的是非Application的話,比如說Fragment、Activity,Glide會在對應Activity發(fā)生重要生命周期回調(diào)的時候?qū)θ蝿者M行相應的處理,比如說在Activity.onDestroy()發(fā)生的時候,Glide就對在這個Activity里產(chǎn)生的任務進行停止處理。避免資源的浪費。

如何做到的呢?其實Glide是往當前的Activity當中添加一個隱藏的Fragment,因為Fragment的生命周期和Activity是同步的,所以這個Fragment就能夠?qū)ι芷诨卣{(diào)進行處理了。

看一下這個Fragment:

public class RequestManagerFragment extends Fragment {
    private final ActivityFragmentLifecycle lifecycle;
    .
    .
    .
    @Override
    public void onStart() {
        super.onStart();
        lifecycle.onStart();
    }

    @Override
    public void onStop() {
        super.onStop();
        lifecycle.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        lifecycle.onDestroy();
    }
    
    .
    .
    .
}

使用了回調(diào)通知了具體的監(jiān)聽類。看一下這個LifecycleListener:

/**
 * An interface for listener to {@link android.app.Fragment} and {@link android.app.Activity} lifecycle events.
 */
public interface LifecycleListener {

    /**
     * Callback for when {@link android.app.Fragment#onStart()}} or {@link android.app.Activity#onStart()} is called.
     */
    void onStart();

    /**
     * Callback for when {@link android.app.Fragment#onStop()}} or {@link android.app.Activity#onStop()}} is called.
     */
    void onStop();

    /**
     * Callback for when {@link android.app.Fragment#onDestroy()}} or {@link android.app.Activity#onDestroy()} is
     * called.
     */
    void onDestroy();
}

這是Glide里定義的生命周期監(jiān)聽接口,可以看到監(jiān)聽了onStart()、onStop()和onDestroy()這三種情況。

Glide的RequestManager類實現(xiàn)了這個接口,

public class RequestManager implements LifecycleListener

我們看一下它的實現(xiàn):

 @Override
public void onStart() {
    // onStart might not be called because this object may be created after the fragment/activity's onStart method.
    resumeRequests();
}

/**
 * Lifecycle callback that unregisters for connectivity events (if the android.permission.ACCESS_NETWORK_STATE
 * permission is present) and pauses in progress loads.
 */
@Override
public void onStop() {
    pauseRequests();
}

/**
 * Lifecycle callback that cancels all in progress requests and clears and recycles resources for all completed
 * requests.
 */
@Override
public void onDestroy() {
    requestTracker.clearRequests();
}

就是在這里Glide對任務進行了調(diào)度、取消等處理。

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

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

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