0
我學會了不要在變量中存儲上下文,因爲它可能會導致內存泄漏。所以我通過插入weakhashmap來超越上下文。不過,我也需要使用AssetManager。從靜態創建對象後調用非靜態方法,它會泄漏內存嗎?
那麼,這段代碼是否泄漏內存安全?
public class FileUtils {
private static WeakHashMap<Context, FileUtils> contexts = new WeakHashMap<>();
private final AssetManager assets;
private FileUtils(Context context) {
this.assets = context.getAssets();
}
public static FileUtils withContext(Context context) {
if (contexts.containsKey(context)) {
return contexts.get(context);
} else {
FileUtils downloader = new FileUtils(context);
contexts.put(context, downloader);
return downloader;
}
}
public String[] getCodecNamesInArray(ArrayList<File> extract, String folderName) {
String[] codecsArray = new String[0];
if (extract == null) {
try {
codecsArray = assets.list(folderName);
} catch (IOException e) {
e.printStackTrace();
}
} else {
codecsArray = new String[extract.size()];
for (int i = 0; i < extract.size(); i++) {
codecsArray[i] = extract.get(i).getName();
}
}
return codecsArray;
}
}
在調用活動:
FileUtils.fromContext(this).getCodecNamesInArray(list, folderName);