小编Jos*_*bal的帖子

为什么我的 android 应用程序消耗太多内存?

情况是这样的:我有一个活动,它有一个工具栏、一个 Tablayout 和一个 View Pager(将包含 5 个片段)

在第一个片段中,我有一个布局,其中将包含一个默认片段,该片段将具有一个包含两列的 Recycler 视图。上面的每个元素都有一张从 Internet 下载的图像(使用 Glide 并保存在缓存中),当用户单击支架(列表中的一个元素)时,会将“布局容器”上的这个默认片段更改为另一个将有一个新的 Recycler View,其中包含使用 Glide 从 Internet 下载的图像。类似于 Instagram 搜索页面。

我认为 Glide 是问题所在,但我对所有代码进行了注释,当我在模拟器上运行该应用程序时,它会消耗更多或更少的 89 MB RAM。

额外的信息

  • 任何片段内 RView 上的每个元素都是通过使用 Volley 下载 JSONArray 创建的,我将请求放入 MySingleton 队列并将上下文定义为 getContext()(我应该使用 getActivity().ApplicationContext() 而不是 getContext() 当代码来自片段?)

(在 Activity 内的视图寻呼机内的片段内)

MySingleton.getInstance(getContext()).addToRequestQueue(req);
Run Code Online (Sandbox Code Playgroud)

然后它下载图片 URL 并使用 Glide 在视图上收费。

if(holder.publication.getPicture() != null ){
        Glide.with(holder.ctx).load(holder.publication.getPicture()).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(holder.picture_imgView);
    }
Run Code Online (Sandbox Code Playgroud)
  • 我没有使用静态变量

  • 此外,我从 Recycler View 元素中删除了所有动画,但仍然很慢。

  • 我使用 Android 监视器和“Jump Java Heap”选项来查看它是如何管理内存的,并且主编号在 Byte[] 上(我不明白使用这个工具)

非常感谢!

更新 在我的日志中,我总是得到这个:

W/ViewRootImpl: Dropping event …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-recyclerview android-glide

3
推荐指数
1
解决办法
3974
查看次数