2017-04-21 4 views
0

ユーザーが複数回クラッシュした場合、別のアクティビティを起動するアプリがあります。しかし、バックグラウンドサービス/プッシュサービスのため、この代替アクティビティでアプリがクラッシュする可能性があります。キャッチされない例外がスローされたときにメインスレッドを防止または再開することは可能ですか?

メインスレッドが死ぬのを防ぎ、メッセージキューを保持する方法はありますか。私はThread.setDefaultUncaughtExceptionHandler()を使用しており、例外を飲み込んでいますが、スレッドがまだフリーズまたは終了しているようです。 thread.start()を試しましたが、MessageQueueに投稿されたすべてのUIイベントは機能しなくなりました(ビューは固定されています)。

+2

いいえ、あなたのコード – Selvin

+1

tryブロック内のコード全体を置くはい、あなたのコードを修正 – TripeHound

+0

てみてくださいを修正。しかし、私はあなたに警告します、それは良い習慣ではありません。 –

答えて

0

この場合、Thread.start()で十分ではないと思います。問題を理解していれば、キャッチされていない例外ハンドラの後に、キャッチされていない例外をもう処理できません。他のプロセスであなたの「別のアクティビティ」を開始するのが最善の方法だと思います。 Here is explained how to do that

私はその回答からいくつかの情報源をコピーしました。最初に保留中のインテントを準備します。

intent = PendingIntent.getActivity(/*Applcation context*/, 0, 
     /*Intent to 'different activity'*/, /*flags*/); 

はその後キャッチされない例外ハンドラでは、あなたはのは2秒を言わせてのアラームマネージャを設定します。

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent); 
System.exit(2); 
関連する問題