Мое приложение отображает много изображений и кэширует их в памяти, поэтому использует память большого объема (около 40 МБ кучи). С другой стороны, он загружает большой файл 7zip (300 МБ) и извлекает их с помощью собственного кода, который использует много памяти и обработки. Иногда извлечение невозможно, но после перезагрузки приложения он работает. Хотя я не получаю никакого исключения, поскольку это собственный код, я считаю, что это из-за нехватки памяти.Сервис в другом процессе
Поэтому я решил поместить извлечение в другом процессе, чтобы я мог убить его после его завершения (здесь стоимость нового процесса не является вопросом, потому что сначала работа важнее, а извлечение - это тяжелый процессор, который сам по себе). Но теперь, прежде чем убить процесс, я должен проверить, не запущено ли другое извлечение. У меня возникло два решения:
1- Начать новый процесс для каждого извлечения. (Я не знаю, возможно ли это в андроиде)
2- Как-то проверить, не запущено ли другое извлечение и если не убьют процесс. (Это может привести к выходу из памяти)
3- Как-то дождитесь завершения извлечения, прежде чем начинать новый. (это очень сложно, как это должно быть сделано между различными процессами)
Как я не могу понять, как это сделать, мне действительно нужны советы экспертов.
--EDIT ------------------------------------------- ----
Я проверил извлечение 400-мегабайтного 7zip-файла. После первого извлечения он всегда терпит неудачу. Таким образом, процесс должен быть убит после каждого извлечения и нового запуска. Таким образом, второй вариант отсутствует в списке!
И для записи, родной код 7zip не мой, это Andro7Z, основанный на 7ZA linux, и даже если бы я сам скомпилировал его, но я действительно не хочу с ним связываться.
Вы можете поместить сервис извлечения в отдельный процесс, но зачем вам его убивать, когда это будет сделано? Если вы запрограммировали это правильно, он должен иметь возможность восстановить всю используемую память. Если нет, вам нужно исправить это - не ищите способ работать с негерметичным кодом. Сколько пользователей хочет, чтобы на телефоне была какая-то неисправная память? –
@DavidWasser Собственно код 7zip не мой. Это Andro7z, основанный на 7za linux. И я предпочитаю убивать его после этого, чтобы память была полностью исправлена. Я еще не проверял, но что, если второй экстракт не получит достаточного количества памяти. С другой стороны, это мой последний и самый надежный вариант, потому что в одно время не будет двух или более извлечений. – Ali
Либо вы не вызываете правильные методы в библиотеке, чтобы освободить память, либо библиотека имеет утечки памяти. Вы должны поговорить с людьми, которые создали библиотеку. –