1

キャッチされていない例外を処理し、スプラッシュ画面で行う初期化がたくさんあるため、スプラッシュ画面からアプリケーションを再起動するコードを次に示します。これが私の起動画面です。

これで、この趣旨の次のコードが作成されました。

@Override
    public void uncaughtException(Thread thread, Throwable ex) {
        // restart Application
        Log.e("OSRAM Lightify", "LightifyApplication: UNCAUGHT EXCEPTION FOUND: \n" + ex.getStackTrace());

        Intent reStartIntent = getBaseContext().getPackageManager()
                .getLaunchIntentForPackage(getBaseContext().getPackageName());
        reStartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(reStartIntent);


    }

しかし、ハングアップしstartActivity(reStartIntent);て画面が空白になります。

ここで何が起こっているのかを理解するのを手伝ってもらえますか?

4

1 に答える 1

0

これには多くの原因が考えられます。この後、次のように新たに開始します。

@Override
public void uncaughtException(final Thread thread, final Throwable ex) {

    LOG.error("", ex);

    installRestartIntent();

    System.exit(2);
}

private void installRestartIntent() {

    Intent rescueIntent = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage(getBaseContext().getPackageName());
    rescueIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    final PendingIntent pendingIntent = PendingIntent.getActivity(application,
                                                                  0,
                                                                  rescueIntent,
                                                                  rescueIntent.getFlags());
    final AlarmManager alarmManager = (AlarmManager) application.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC, DateTime.now().plusSeconds(1).getMillis(), pendingIntent);
}

編集: 注意してください - いくつかのクラッシュはループを引き起こすかもしれません - あなたはこれをチェックしたいかもしれません!

于 2014-10-11T14:31:03.413 に答える