gpt4 book ai didi

android - 将 5mb 数据文件复制到数据库后,如何清除 android 中的堆内存?

转载 作者:行者123 更新时间:2023-11-30 04:28:28 25 4
gpt4 key购买 nike

我正在尝试将一个 5mb 的数据库文件从我的应用程序的原始文件夹复制到数据文件夹。

我可以成功复制它几次。但是之后我无法点击图像,点击时我得到了OutOfMemory-exception。

所以我正在尝试清除堆内存。有什么办法吗?

private void copyFromZipFile() throws IOException{
InputStream is = mycontext.getResources().openRawResource(R.raw.dbfile);
// Path to the just created empty db
File outFile = new File(DB_PATH ,DB_NAME);
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFile.getAbsolutePath());
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));
try {
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = zis.read(buffer)) != -1) {
try
{
baos.write(buffer, 0, count);
Log.d("", "writing..."+buffer.toString());
}catch (Exception e) {
// TODO: handle exception
Log.v("","Error writing"+e );
}
}
baos.writeTo(myOutput);


}
} finally {
zis.close();
myOutput.flush();
myOutput.close();
is.close();
}
}

最佳答案

在您的第一个 while 循环中,您将为每次迭代重新创建 ByteArrayOutputStream。您没有关闭它,也没有在完成后将其显式设置为 null,因此这是内存泄漏,因为垃圾收集器无法收集实例。

更好的方法是将 baosbuffercount 的创建移出循环并使用 reset()-method在写入 OutputStream 后,在 ByteArrayOutputStream 上。

关于android - 将 5mb 数据文件复制到数据库后,如何清除 android 中的堆内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com