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