滑行与片段上下文

时间:2016-04-21 16:58:26

标签: android android-context android-glide

这与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中看到的内容:

Debug information in mGlide object

context似乎是我的项目ApplicationContext。现在我对Android上下文不是很熟悉,但这是对的吗?我以为它会像com.MyFragment .....

另外,有没有一种简单的方法来检查滑行是否跟随我的片段的生命周期?

1 个答案:

答案 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中所做的那样。