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