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