#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, вы не должны отправлять какие-либо сообщения обработчику, поскольку ваше приложение будет разбито.