情况是这样的:
我有一个Activity,其中包含一个工具栏、一个选项卡布局和一个View Pager(其中包含5个片段)。
在第一个片段中,我有一个布局,其中包含一个默认片段,该片段将包含一个带有两列的Recycler View。每个元素都有一个从互联网上下载的图像(使用Glide并保存在缓存中),当用户单击列表中的某个元素时,将会将此默认片段更改为“布局容器”上的另一个片段,该片段将包含一个使用Glide从互联网上下载的新图像的Recycler View。类似于Instagram搜索页面。
我以为Glide是问题所在,但我注释了所有代码,当我在模拟器上运行应用程序时,它会消耗大约89 MB的RAM。
额外的信息:
- 在任何片段内部的RView中的每个元素都是通过使用Volley下载JSONArray创建的,我将请求放在MySingleton队列中,并将上下文定义为getContext()(当代码来自片段时,我应该使用getActivity().ApplicationContext()而不是getContext()吗?)
(位于View Pager内部的片段内)
然后它会下载图片的URL并使用Glide在视图上显示。
在第一个片段中,我有一个布局,其中包含一个默认片段,该片段将包含一个带有两列的Recycler View。每个元素都有一个从互联网上下载的图像(使用Glide并保存在缓存中),当用户单击列表中的某个元素时,将会将此默认片段更改为“布局容器”上的另一个片段,该片段将包含一个使用Glide从互联网上下载的新图像的Recycler View。类似于Instagram搜索页面。
我以为Glide是问题所在,但我注释了所有代码,当我在模拟器上运行应用程序时,它会消耗大约89 MB的RAM。
额外的信息:
- 在任何片段内部的RView中的每个元素都是通过使用Volley下载JSONArray创建的,我将请求放在MySingleton队列中,并将上下文定义为getContext()(当代码来自片段时,我应该使用getActivity().ApplicationContext()而不是getContext()吗?)
(位于View Pager内部的片段内)
MySingleton.getInstance(getContext()).addToRequestQueue(req);
然后它会下载图片的URL并使用Glide在视图上显示。
if(holder.publication.getPicture() != null ){
Glide.with(holder.ctx).load(holder.publication.getPicture()).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(holder.picture_imgView);
}
我没有使用静态变量。
此外,我从 Recycler View 元素中删除了所有动画,但仍然很慢。
我使用 Android Monitor 和“跳转 Java 堆”选项来查看内存管理情况,主要数字在 Byte[] 上(我不理解使用这个工具)。
非常感谢!
更新: 我的日志上总是打印出这个:
W/ViewRootImpl: Dropping event due to no window focus: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0xc8, repeatCount=1, eventTime=18009881, downTime=18009352, deviceId=-1, source=0x101 }
I/Choreographer: Skipped 98 frames! The application may be doing too much work on its main thread.