У меня есть большой файл данных в сжатом виде, размером около 20 МБ. Когда он распакован, он занимает около 50 МБ. Следующий исходный код работает нормально. Я нашел оригинал в Интернете где-то еще и немного изменил его. И этот метод вызывается внутри AsyncTask.doInBackground.
Итак, я хочу знать, как я могу сохранить текущий статус (извините, я не знаю правильного английского слова) и возобновить процедуру позже? Я имею в виду, что этот метод занимает немного много времени (около минуты на эмуляторе), и я знаю, что это невозможно, так как данные огромны. Итак, если основное действие этого метода будет уничтожено, я хочу сохранить текущее состояние распаковки файла, а когда действие станет активным, я хочу возобновить распаковку с последней точки. Надеюсь, мое объяснение прояснит мои намерения.
Я думал об использовании службы, но я также хочу взаимодействовать с пользовательским интерфейсом, таким как отображение прогресса или чего-то еще. Я не могу найти хорошую информацию для этого в сервисе, когда я грубо сканирую ссылку, но есть ли способ сделать это в сервисе? И вы думаете, я должен использовать это?
В любом случае, моя главная мысль - как возобновить распаковку файла.
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();
}
}
}
Спасибо заранее,
yokyo