Предупреждения «Отправка сообщения обработчику в мертвом потоке» в службе переднего плана, которая получает местоположенAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Предупреждения «Отправка сообщения обработчику в мертвом потоке» в службе переднего плана, которая получает местоположен

Сообщение Anonymous »

У меня возникла проблема со службой переднего плана в моем приложении для Android. В журнале я обнаружил следующее предупреждение:

Отправка обработчика (com.google.android.gms.internal.common.zzi) {c19f288}сообщение обработчику в мертвой цепочке (спросите Gemini)
java.lang.IllegalStateException: Handler
(com.google.android.gms.internal.common.zzi) {c19f288} отправка сообщения
обработчику мертвого потока по адресу
android.os.MessageQueue.enqueueMessage(MessageQueue.java:560) по адресу
android.os.Handler.enqueueMessage(Handler.java:786) по адресу
android.os.Handler.enqueueMessage(Handler.java:786) по адресу
android.os.Handler.sendMessageAtTime(Handler.java:735) в
android.os.Handler.sendMessageDelayed(Handler.java:705) в
android.os.Handler.post( Handler.java:435) по адресу
com.google.android.gms.common.util.concurrent.HandlerExecutor.execute(com.google.android.gms:play-services-basement@@18.3.0:1)
at
com.google.android.gms.common.api.internal.ListenerHolder.notifyListener(com.google.android.gms:play-services-base@@18.4.0:2)
at
com.google.android.gms.internal.location.zzdv.zzd(com.google.android.gms:play-services-location@@21.2.0:2)
atcom.google.android.gms.location.zzv.zza(com.google.android.gms:play-services-location@@21.2.0:7)
на
com.google .android.gms.internal.location.zzb.onTransact(com.google.android.gms:play-services-location@@21.2.0:3)
в android.os.Binder.execTransactInternal(Binder.java :1344) по адресу
android.os.Binder.execTransact(Binder.java:1275)

Контекст кода:

Код: Выделить всё

private val locationCallback: LocationCallback = object : LocationCallback() {}
private val mHandlerThread = HandlerThread("locationUpdates").apply { start() }
private val mHandler = Handler(mHandlerThread.looper)

override fun onCreate() {
super.onCreate()
requestLocationUpdates()
}

private fun requestLocationUpdates() {
if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
try {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
createLocationRequest()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
val location = locationResult.lastLocation
if (location != null) {
val speedKmph = (location.speed * 3.6).roundToInt()
mSpeed = speedKmph
}
}
}
}
mFusedLocationClient.requestLocationUpdates(
mLocationRequest,
locationCallback,
mHandler.looper // Use mHandler's looper
)
} catch (e: Exception) {
// Log the error or handle it appropriately
e.printStackTrace()
}
} else {
// Handle missing permissions
}
}
Вот фрагмент соответствующего кода, в котором я запрашиваю обновления местоположения в своей службе переднего плана:

Код: Выделить всё

private fun requestLocationUpdates() {
if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
try {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
createLocationRequest()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
// Handle location result
}
}
mFusedLocationClient.requestLocationUpdates(
mLocationRequest,
locationCallback,
mHandlerThread.looper
)
} catch (e: Exception) {
e.printStackTrace()
}
} else {
// Handle missing permissions
}
}
Проблема:
Предупреждение предполагает, что обработчик пытается отправить сообщение в поток, который уже остановлен или находится в недопустимом состоянии. Это потенциально может привести к сбоям или другим проблемам в моей службе.
Вопросы:
Как я могу гарантировать, что мой обработчик правильно управляется и не отправляет сообщения в мертвый поток?
Есть ли способ правильно обработать жизненный цикл Handler и HandlerThread в службе переднего плана, чтобы избежать этой проблемы?
Какие изменения мне следует внести в использование Handler и HandlerThread, чтобы предотвратить это? ошибка?
Будем очень признательны за любые рекомендации или предложения!
ИИ не может решить эту проблему.
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... nd-service
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»