我有一个Android应用,其中包含某些文件的列表。
这些文件在像这样的ArrayList中
public static ArrayList<File> list=new ArrayList<File>();
list.add("PATH");
list.add("PATH");
list.add("PATH");
....
上面的ArrayList存在于Application Class中。
主要问题是假设用户暂时将我的应用最小化,直到我的应用加载文件列表并且用户开始使用其他应用。在我的应用程序加载结束后,list
包含所有必要文件的列表。用户在一段时间后返回,但同时当用户使用其他应用程序时,Android系统需要释放一些内存,以便清除我的应用程序中的ArrayList,因为我的应用程序位于最近的列表中并且当前未被用户。
因此,当用户返回时,他必须再次等待,直到装载结束。
是否有任何解决方案,因为我不想永远保存ArrayList,但希望它不被Android系统清除。
答案 0 :(得分:4)
您也可以使用Singleton类来提供此用例。
class Holder
{
private static Holder instance = null;
private List<String> itemArray;
private Holder(){
itemArray = new ArrayList<>();
}
public static Holder getInstance(){
if (instance == null)
instance = new Holder();
return instance;
}
public List<String> getItemArray(){
return new ArrayList<>(this.itemArray);
}
public void addItemToArray(String item){
this.itemArray.add(item);
}
}
答案 1 :(得分:1)
您可以考虑使用SharedPreferences。
编辑。
SharedPreferences preferences = getSharedPreferences("PATH_KEEPER",MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
//You can use Set<String> or turn into Json and store as String
Set<String> stringSet = new HashSet<>();
stringSet.add("somePath");
stringSet.add("somePath");
editor.putStringSet("Path",stringSet);
editor.apply();
//Whenever you want to remove
editor.clear();
答案 2 :(得分:1)
如果您将列表保留在活动类中,并将文件路径存储为String
,那么此代码将满足您的目的:
对于String Array:
public static ArrayList<String> list = new ArrayList<String>();
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putStringArrayList("list", list);
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
list = savedInstanceState.getStringArrayList("list");
}