我有一个带有 fragment 的 Android Activity 。
在该 fragment 中,我使用改造来获取数据并设置静态标志,这样,当我再次访问该 fragment 时,我会再次限制获取数据。
我还将数据存储在单例实例中。
但即使在我销毁 Activity/关闭应用程序之后,静态标志和实例仍然可用,并且列表也存在于实例中,这使我的应用程序发生故障。
但我希望重新创建实例并在每次运行时获取数据。
这是我的单例实例。
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;
}
}
这是我的 fragment :
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 调用我的 fragment 的方式:
@Override
public void onTabSelected(TabLayout.Tab tab) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentBox, new DataFragment()).commit();
}
我尝试在 MainActivity 的 onDestroy() 处提供 System.gc(),但单例实例仍然处于 Activity 状态。
我根据这个搜索了很多SOF帖子,但无法解决这个问题。
任何帮助都会非常有用。
最佳答案
指向 Singleton 的指针在 Utilities-Class 本身中是静态的,因此 Singelton 永远不能用于 GC,除非您在离开 MainAcitivity 时设置 utils = null
Utilities.reset();
关于java - android:应用程序关闭后,单例实例不会被垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56311868/