【发布时间】:2019-05-26 08:22:01
【问题描述】:
我有一个带有片段的 android 活动。
在片段中,我使用改造来获取数据并设置一个静态标志,这样,当我再次访问该片段时,我会再次限制获取数据。
我还将数据存储在单例实例中。
但即使在我销毁活动/关闭应用程序之后,静态标志和实例仍然可用,并且该列表也存在于实例中,这导致我的应用程序出现故障。
但我希望在每次运行时重新创建实例并获取数据。
这是我的单例实例。
public class Utilities {
private static Utilities utils = null;
private List<Data> friendsList;
public List<Data> getDataList() {
return dataList;
}
public void setDataList(List<Data> dataList) {
this.dataList = dataList;
}
private List<Data> dataList;
public synchronized static Utilities getInstance(){
if(utils == null){
utils = new Utilities();
}
return utils;
}
}
这是我的片段:
public class DataFragment extends Fragment
{
private static boolean hasObtainedData;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(!hasObtainedData){
getData(v);
}else{
recyclerView.setAdapter(new Adapter(utils.getDataList()));
}
}
private void getData(View v) {
//get Data using Retrofit:
hasObtainedData = true;
utils.setDataList(dataListObtainedUsingRetrofit)
recyclerView.setAdapter(new Adapter(utils.getDataList()));
}
}
这就是我从 MainActivity 调用我的片段的方式:
@Override
public void onTabSelected(TabLayout.Tab tab) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentBox, new DataFragment()).commit();
}
我尝试在 MainActivity 的 onDestroy() 处提供 System.gc(),但仍然存在单例实例。
我基于此搜索了许多 SOF 帖子,但无法解决此问题。
任何帮助都会非常有用。
【问题讨论】:
-
清除您在
onDestroy()中的活动列表如何?
标签: java android singleton fragment