Intereting Posts
Ошибка: причина отсутствия android.compileSdkVersion Как динамически обновлять ListView на Android Клики для ссылок на веб-просмотр Android Событие для состояния воспроизведения VideoView или воспроизведения / паузы MediaController Android Studio: «Предупреждение libpng: iCCP: не распознавание известного профиля sRGB, который был отредактирован» Местоположение: Разрешение GPS / сети: требуется, если доступно Как приостановить android.speech.tts.TextToSpeech? Является ли android.os.Build.SERIAL уникальным? Анализ локального XML-файла с использованием Sax в Android Отладить собственный код в Android Studio Android: определить, отключены ли уведомления пользователем Как установить стиль шрифта полужирным, курсивом и подчеркнутым в Android TextView? Как воссоздать все фрагменты в ViewPager: Как настроить Android SeekBar прогрессу программно Как сделать независимую прокрутку строк и столбцов (приложение la Netflix) на Android в WebView?

Java.lang.RuntimeException: обработчик (android.os.Handler) отправляет сообщение обработчику по мертвой нити

В моем приложении я использую IntentService для отправки SMS.

@Override protected void onHandleIntent(Intent intent) { Bundle data = intent.getExtras(); String[] recipients = null; String message = getString(R.string.unknown_event); String name = getString(R.string.app_name); if (data != null && data.containsKey(Constants.Services.RECIPIENTS)) { recipients = data.getStringArray(Constants.Services.RECIPIENTS); name = data.getString(Constants.Services.NAME); message = data.getString(Constants.Services.MESSAGE); for (int i = 0; i < recipients.length; i++) { if(!StringUtils.isNullOrEmpty(recipients[i])) { try { Intent sendIntent = new Intent(this, SMSReceiver.class); sendIntent.setAction(Constants.SMS.SEND_ACTION); PendingIntent sendPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, sendIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent deliveryIntent = new Intent(this, SMSReceiver.class); deliveryIntent.setAction(Constants.SMS.DELIVERED_ACTION); PendingIntent deliveryPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveryIntent, PendingIntent.FLAG_UPDATE_CURRENT); SmsManager.getDefault().sendTextMessage(recipients[i].trim(), null, "[" + name + "] " + message, sendPendingIntent, deliveryPendingIntent); } catch (Exception e) { Log.e(TAG, "sendTextMessage", e); e.printStackTrace(); Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); MainActivity.instance.writeToLogFile(e.getMessage(), System.currentTimeMillis()); } } } } } 

При запуске приложения я получаю следующую ошибку:

 W/MessageQueue(7180): Handler (android.os.Handler) {42586468} sending message to a Handler on a dead thread W/MessageQueue(7180): java.lang.RuntimeException: Handler (android.os.Handler) {42586468} sending message to a Handler on a dead thread W/MessageQueue(7180): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:294) W/MessageQueue(7180): at android.os.Handler.enqueueMessage(Handler.java:618) W/MessageQueue(7180): at android.os.Handler.sendMessageAtTime(Handler.java:587) W/MessageQueue(7180): at android.os.Handler.sendMessageDelayed(Handler.java:558) W/MessageQueue(7180): at android.os.Handler.post(Handler.java:323) W/MessageQueue(7180): at android.widget.Toast$TN.hide(Toast.java:367) W/MessageQueue(7180): at android.app.ITransientNotification$Stub.onTransact(ITransientNotification.java:55) W/MessageQueue(7180): at android.os.Binder.execTransact(Binder.java:351) W/MessageQueue(7180): at dalvik.system.NativeStart.run(Native Method) 

Мой SMSReceiver находится в другом классе. Как я могу решить эти проблемы? Благодаря; Эяль.

Solutions Collecting From Web of "Java.lang.RuntimeException: обработчик (android.os.Handler) отправляет сообщение обработчику по мертвой нити"

Проблема здесь в том, что вы создаете Toast внутри потока, который управляется IntentService . Система будет использовать Handler связанный с этим потоком, чтобы показать и скрыть Toast .

Сначала Toast будет показан правильно, но когда система попытается скрыть его, после onHandleIntent метода onHandleIntent будет отправлена ​​ошибка «отправка сообщения обработчику в мертвом потоке», потому что поток, на котором был создан Toast , Больше не действует, и Toast не исчезнет.

Чтобы этого избежать, вы должны показать Toast сообщение в Главную тему. Вот пример:

  // create a handler to post messages to the main thread Handler mHandler = new Handler(getMainLooper()); mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show(); } }); 

Показывать Toast на IntentService . Попробуйте этот код ..

 @Override public void onCreate() { super.onCreate(); mHandler = new Handler(); } @Override protected void onHandleIntent(Intent intent) { mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(MyIntentService.this, "Test", Toast.LENGTH_LONG).show(); } }); } 

Источник: – https://stackoverflow.com/a/5420929/4565853