web-dev-qa-db-ja.com

「RuntimeException:再開されないアクティビティの一時停止を実行しています」

(stackoverflowについても同様の質問がありますが、正解はなく、問題のコンテキストも少し異なります。)

「Java.lang.RuntimeException:再開されないアクティビティの一時停止を実行しています」

ゲームアプリケーション(通常のビューとGLSurfaceViewの両方を使用)を開発します。電話のディスプレイのオンとオフを切り替えると非常に高速で、この例外が発生することがあります(ActivityThreadによってスローされます)が、例外の後、アプリケーションは正常に実行されています。私のアプリは横向きのアプリであり、これはマニフェストでも正しく設定されています(方向と構成の変更も含まれます)。

これでよろしいですか?

これは、ActivityThreadによってアプリケーションのアプリケーション名でスローされたRuntimeExceptionですが、アプリを終了しません。

24
Thomas Calc

Androidバージョン)に応じて、activity.recreate()(または.finish()と.startActivity())を呼び出していたため、この問題が発生しました。もちろん、呼び出すだけです。これらの機能は、言語をリロードしたり、向きをリセットしたり、アクティビティのレクリエーションでのみ実行できる同様のことをしたいためです。

ただし、onResume()からこれらの関数(.finish()または.recreate())を呼び出すことはできません。そうした場合、前述の致命的ではない例外が発生します。

.recreate()呼び出しを1ミリ秒遅らせることで問題を「解決」し、アクティビティが適切に再開されてから強制終了されるようにしました。

  Handler handler = new Handler();
  handler.postDelayed(new Runnable()
  {
    @Override
    public void run()
    {
      log.i("TX.refresh", "Switching to %s from %s", lang, lang);
      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
      {
        ctx.finish();
        ctx.startActivity(ctx.getIntent());
      } else ctx.recreate();
    }
  }, 1);
51
velis