美文网首页
Glide是怎么和Activity的重要生命周期关联的

Glide是怎么和Activity的重要生命周期关联的

作者: 劳达斯 | 来源:发表于2017-05-21 18:31 被阅读306次

Glide

Glide,它的with()方法有四、五个重载,分别可以传入Context、Activity、FragmentActivity、v4包下的Fragment和app包下的Fragment。虽然有五种重载,但是最后只有两种情况,即传入Application类型的参数,和传入非Application类型的参数。

传入Application的话,Glide的生命周期就和应用程序一样了。应用程序退出,Glide就停止加载任务。

如果传入的是非Application的话,比如说Fragment、Activity,Glide会在对应Activity发生重要生命周期回调的时候对任务进行相应的处理,比如说在Activity.onDestroy()发生的时候,Glide就对在这个Activity里产生的任务进行停止处理。避免资源的浪费。

如何做到的呢?其实Glide是往当前的Activity当中添加一个隐藏的Fragment,因为Fragment的生命周期和Activity是同步的,所以这个Fragment就能够对生命周期回调进行处理了。

看一下这个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();
    }
    
    .
    .
    .
}

使用了回调通知了具体的监听类。看一下这个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里定义的生命周期监听接口,可以看到监听了onStart()、onStop()和onDestroy()这三种情况。

Glide的RequestManager类实现了这个接口,

public class RequestManager implements LifecycleListener

我们看一下它的实现:

 @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对任务进行了调度、取消等处理。

相关文章

网友评论

      本文标题:Glide是怎么和Activity的重要生命周期关联的

      本文链接:https://www.haomeiwen.com/subject/hulvxxtx.html