gpt4 book ai didi

android - 我应该如何在 AsyncTask.doInBackground 中解压一个大数据文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:50 25 4
gpt4 key购买 nike

我有一个很大的数据文件,压缩后大约有 20MB。解压缩后,它最大约为 50MB。以下源代码工作正常。我在其他地方的网络上找到了原件并对其进行了一些修改。此方法在 AsyncTask.doInBackground 中调用。

所以,我想知道的是,我怎样才能保存正在进行的状态(?抱歉,我不知道正确的英文单词)并稍后恢复程序?我的意思是,这种方法需要一点时间(在模拟器上大约一分钟),而且我知道没有办法,因为数据有点大。所以,如果这个方法的一个主要 Activity 被杀死,我想保存解压文件的当前状态,当 Activity 激活时,我想从最后一点恢复解压。希望我的解释能澄清我的 Intent 。

我正在考虑使用服务,但我也想与 UI 交互,例如显示进度或其他内容。当我粗略地浏览引用资料时,我找不到在服务中执行此操作的好信息,但是有没有办法在服务中执行此操作?你认为我应该使用它吗?

无论如何,我的主要观点是如何恢复解压文件。

private final static int CHUNK_SIZE = 32 * 1024;
byte[] _fileIOBuffer = new byte[CHUNK_SIZE];

public void unzipFile(DBFileDownloader downloader, File zipFile, String directory)
throws IOException
{
ZipInputStream in = null;
FileOutputStream os = null;
try
{
in = new ZipInputStream (new FileInputStream(zipFile));
ZipEntry entry = null;
while ((entry = in.getNextEntry ())!= null)
{
String entryName = entry.getName();
if (entry.isDirectory ()) {
File file = new File (directory, entryName);
file.mkdirs();
}
else {
File file = new File(directory, entryName);
if (file.exists()){
file.delete(); // I don't know how to append, so delete it always
}
os = new FileOutputStream (file);

int bytesRead = 0;
while ((bytesRead = in.read (_fileIOBuffer))!= -1) {
os.write(_fileIOBuffer, 0, bytesRead);
// progress procedure
}
os.close();
}
}
}
catch (FileNotFoundException e) {
Log.v("unzip", e.getMessage());
}
catch (IOException e) {
Log.v("unzip", e.getMessage());
}
finally{
if (in != null ){
in.close();
}
if (os != null ){
os.close();
}
}
}

提前致谢,横京

最佳答案

So, if a main activity of this method gets killed, I want to save the current status of decompressing the file, and when the activity gets active, I want to resume decompressing from the last point.

如果不是不可能,那将是极其困难的。

I was thinking using a service, but I also want to interact with UI, such as showing a progress or whatever.

这是一个很好的计划。只需让 Activity 向服务注册一个监听器,服务就会调用该监听器以获取“进度或其他信息”。

关于android - 我应该如何在 AsyncTask.doInBackground 中解压一个大数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074374/

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