Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Android завершает приложение

#android


Подскажите, написал простенькое приложение под андроид, которое периодически опрашивает
свой сервак по сети. Заметил, что со временем андроид завершает его, как предположение
при не хватке памяти или при малом заряде батареи. Но другие приложения продолжают
работать, например OpenVPN. Подскажите в какую сторону копать, как сделать так, чтобы
приложение не завершалось, имело высокий приоритет или что-то в этом духе!
    


Ответы

Ответ 1



Когда у телефона не хватает оперативной памяти, он начинает уничтожать процессы по приоритетам. Если грубо говорить, то сначала уничтожаются активити, затем сервисы, затем сервисы с пометкой foreground. (Да не отрежут мне пальцы за такое пояснение коллеги). Что-бы этого не случалось, вам нужно часть логики перенести в Service, в таком случае система с меньшим шансом возьмет именно ваше приложение для освобождения памяти. UPD:

Ответ 2



Видимые процессы одни из самых высоких по приоритету в Android, и они выше системных. Задача ваш Service сделать видимым, а если точней вывести на передний план. Использовав метод startForeground void startForeground (int id, Notification notification) Именно то уведомление, которым злоупотребляют некоторые известные апки, которое можно остановить только в процессах лаунчера.

Ответ 3



Дополню ответы коллег, если у Вас Android 6.0, то все становится еще сложнее. В данном обновлении появились так называемые режимы Doze mode и App Standby. Doze Mode — режим «отключки», в который переходят все устройства на Marshmallow после некоторого времени обездвижения без зарядки. App Standby — автоматическое лишение приложений доступа к ресурсам устройства, всех которые давно не открывал пользователь. Вот здесь можно почитать поподробнее хабр Вот здесь можно послушать про нововведения 6.0, про вышеперечисленные режимы мотайте ближе к концу AndroidDev

Комментариев нет:

Отправить комментарий