这与Glide image loading with application context
有关我在Activity中托管了几个片段,当用户浏览应用时,片段会被另一个片段替换。
我将RequestManager
传递给MyFragment的RecyclerView适配器,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
MyAdapter adapter = new MyAdapter(Glide.with(this), listOfPhotos);
recyclerView.setAdapter(adapter);
...
}
我的适配器:
public class MyAdapter
extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private RequestManager mGlide;
...
// constructor
public MyAdapter(RequestManager glide, List<MyStuff> listOfPhotos) {
mGlide = glide;
...
}
...
}
当我调试我的应用程序时,这是我在对象mGlide中看到的内容:
context
似乎是我的项目ApplicationContext
。现在我对Android上下文不是很熟悉,但这是对的吗?我以为它会像com.MyFragment .....
另外,有没有一种简单的方法来检查滑行是否跟随我的片段的生命周期?
答案 0 :(得分:1)
此问题更适合Glide's Google Group链接的Readme。
您的使用看起来干净且高效,这就是我建议采用的方式。
上下文似乎是我的项目的ApplicationContext。
Glide
是一个单身人士,因此用它看到的第一个Activity
来初始化它是没有任何意义的(参见Glide.get
)。如果您检查RequestManager
实际使用Context
的方式,您会看到它在整个地方传递,这也不会有用并且会泄漏。它主要用于.getContentResolver
并在其他类中通过Glide
获取Glide.get(context)
单例。
我认为它会像com.MyFragment ......
您可以在RequestManager
的以下字段中找到您要查找的内容:
private final Lifecycle lifecycle;
private final RequestManagerTreeNode treeNode;
private final RequestTracker requestTracker;
查看这些类型的所有子类/实现。另请检查Context.mActivityLifecycleCallbacks
我认为这些是相同的对象。
有没有一种简单的方法来检查滑行是否跟随我的碎片&#39;生命周期?
您可以在上述类中放置断点,和/或检查资源是否通过堆转储释放(由于缓存,最后一个可能很棘手)。如果你想要更多的洞察力,你可以尝试按照Wiki上的说法启用日志记录:Debugging and Error Handling wiki并为监听器/目标编写自己的记录器,就像我在glide-support/...utils中所做的那样。