Android Как управлять потоком обновления sleep-awake-alive в жизни приложения

#android #multithreading

#Android #многопоточность

Вопрос:

У меня есть проект, в котором необходимо обновить ширину транспортного средства с помощью потока, зацикливающего API в виде карты.И я надеюсь, что updateThread может спать, когда приложение переходит в режим onStop или onPause, просыпается, когда onResume и aslo никогда не будут уничтожены в жизненном цикле приложения; В первый раз я пытаюсь просто использовать ниже (решение 1) для обновления:

 new Thread(new Runnable() {
    @Override
    public void run() {
        while(true){
         //update-Vehicle-Looping
        }
    }
}).start();
 

Однако во время тестирования я обнаружил, что потоки не уничтожаются автоматически, когда приложение переходит в режим onStop или onPause, однако нет гарантии, что оно не будет уничтожено, Android будет поддерживать его до тех пор, пока ему не понадобятся ресурсы, которые использует поток.Это не приведет к большим затратам ресурсов, но также может привести к гибели потока;

Поэтому я пытаюсь использовать альтернативный (Решение2), который может управлять потоком в цикле его подъема;

 HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler.post(UpdateRunable);
Runable UpdateRunable=new Runnable() {
    @Override
    public void run() {
        while(IsRun){
         //update-Vehicle-Looping
        }
    }
};
 

используйте IsRun для управления пробуждением потока обновления или переходом в спящий режим в цикле подъема приложения; В некотором смысле (решение 2) улучшить (решение 1). но не может избежать риска прерывания потока.

Может ли какой-либо орган дать мне какое-либо предложение по управлению потоком обновления в жизненном цикле приложения?

Ответ №1:

Сначала вы должны переместить свою логику в сервис, чтобы она не зависела от жизненного цикла Activity. Делая это, вы можете просто перестать отправлять свои события в map view. Используйте привязку службы для управления пользовательским интерфейсом из службы

Ответ №2:

При обновлении пользовательского интерфейса вы должны использовать обработчик с управляемым интерфейсом. пока вы находитесь на стадии onstop жизненного цикла activity, вы не должны отправлять какие-либо сообщения обработчику, поскольку ваше приложение будет разбито.