RecyclerView
中有Adapter
Fragment
。目前我正在寻找OOM原因并且Context
泄漏可能是其中一个原因。
我在Adapter
中获取上下文时采用了多种方法(需要Context
SharedPreferences
,Glide
/ Picasso
,并替换{{ 1}})。
将Fragments
传递给适配器构造函数,然后将其设置为适配器内的全局变量:
Context
在LobbyAdapter lobbyAdapter = new LobbyAdapter(this.getActivity);
中设置全局Context
并从Adapter
获取Context
:
onCreateViewHolder
当context = parent.getContext();
适配器使用new
时,这会导致问题。但这必定是因为我在SwipeRefreshLayout
中所做的有缺陷的逻辑,仍在追踪这一点。
不要制作全局Fragment
变量,但要从Context
获取与Context
相关的每个View
ViewHolder
}}
Context
Loading an image
The key here is using the holder to get the Context ((FriendProfileViewHolder) holder).coverPhoto.getContext()
在这部分中,由于我对Glide.with(((FriendProfileViewHolder) holder).coverPhoto.getContext())
.load(utilities.webAddress + profileDataModel.user_cover_image_path)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.skipMemoryCache(true)
.centerCrop()
.into(((FriendProfileViewHolder) holder).coverPhoto);
缺乏经验,如果一个方法被不同的Context
重用,我不确定应该从哪个视图获取Context
其他问题:(这可能需要新问题线程。)
在多个Views
中,我执行Adapters
来获取服务器的响应以更改图像。我需要AsyncTask
中的Context
来Interface
来获取应用包,并getPackageName()
来访问资源。
getResources()
也许我应该创建一个全局变量和方法来改变这些值?
答案 0 :(得分:0)
我使用了您在问题中描述的第一种方法,即通过构造函数传递Context,然后将其设置为全局变量供以后使用。这种方法适用于包含RecyclerViews的Fragments。使用它几次,它从未引起Context泄漏问题。
我没有使用任何其他方法,所以不会评论它们。