Страницы

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

воскресенье, 12 января 2020 г.

Android. immortal Thread

#java #android #многопоточность #service


Как известно, система может убить сервис (Service), если ей будет не хватать памяти.
Но в наших силах сделать так, чтобы наш сервис ожил, когда проблема с памятью будет
устранена. Делается это в методе onStartCommand возвращением соответствующей константы.

В своем приложении, к сожалению, я НЕ могу использовать сервис. Я использую обычный
поток.

@Override
public void run() {       
    Looper.prepare();
    // code
    Looper.loop();
}


Он так же как сервис работает в фоновом режиме и выполняет соответствующие команды,
но так же и падает при нехватке памяти.

Ну так вот, знает кто, есть ли возможность этого избежать? Или каким-нибудь образом
реализовывать логику немедленного восстановления убитого потока?
Пробовал повышать приоритет у потока, так же прописывал в манифесте

android:largeHeap="true"


Не помогает. 

Другой сервис использовать для поддержания потока так же нельзя =)
Все что приходит на ум - использовать какой-нибудь системный receiver, который можно
прописать в манифесте. При этом он должен принимать команды постоянно, хотя бы раз
в минуту.
    


Ответы

Ответ 1



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

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

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