Страницы

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

четверг, 7 марта 2019 г.

Android. immortal Thread

Как известно, система может убить сервис (Service), если ей будет не хватать памяти. Но в наших силах сделать так, чтобы наш сервис ожил, когда проблема с памятью будет устранена. Делается это в методе onStartCommand возвращением соответствующей константы.
В своем приложении, к сожалению, я НЕ могу использовать сервис. Я использую обычный поток.
@Override public void run() { Looper.prepare(); // code Looper.loop(); }
Он так же как сервис работает в фоновом режиме и выполняет соответствующие команды, но так же и падает при нехватке памяти.
Ну так вот, знает кто, есть ли возможность этого избежать? Или каким-нибудь образом реализовывать логику немедленного восстановления убитого потока? Пробовал повышать приоритет у потока, так же прописывал в манифесте
android:largeHeap="true"
Не помогает.
Другой сервис использовать для поддержания потока так же нельзя =) Все что приходит на ум - использовать какой-нибудь системный receiver, который можно прописать в манифесте. При этом он должен принимать команды постоянно, хотя бы раз в минуту.


Ответ

Скорее всего вам может помочь только рассылка собственных Intent через AlarmManager. Эти интенты принимайте в собственном ресивере и запускайте сервис.
Вариант с системным интентом, рассылаемым каждую минуту, не подойдёт, т.к. его нельзя ловить в ресивере, определённом в манифесте. Только через Context.registerReceiver(). А, значит, нужен кто-то работающий, чтоб среагировать на интент.

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

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