アクティビティの onCreate メソッドにいくつかのコードがあり、それが 3 回呼び出されていることに気付きました。それは正常な動作ですか?ありがとう。
8 に答える
アクティビティのライフサイクルに関するドキュメントを一読することをお勧めします。
OnCreate は、Activity の有効期間ごとに 1 回だけ呼び出されます。ただし、アクティビティが停止されて復活する原因となる状況がいくつかあります。したがって、 onCreate が再度呼び出されます。
これを適切にサポートするために、状態情報を onSaveInstanceState に保存し、作成時に取得した状態バンドルから復元できます。
予想されるケースを除いて、新しい Thread または Runnable を作成するアクティビティ (onCreate) のみが 2 回呼び出されることがわかりました。(これは Android のバグだと思います)。
解決策は簡単です (気に入らないかもしれませんが :p)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
if(savedInstanceState == null){
// everything else that doesn't update UI
}
}
AndroidManifest で次のステートメントをアクティビティ構成に設定して、構成の変更を独自に処理することもできます。
android:configChanges="orientation|keyboardHidden"
詳細については、公式ドキュメントをご覧ください。
以下は、あなたが説明している動作を生成する、私が遭遇した (そして解決した) シナリオです。
OnTouch をトリガーする 3 つのイベントがあります - 1. android.view.MotionEvent.ACTION_UP 2. android.view.MotionEvent.ACTION_DOWN 3. android.view.MotionEvent.ACTION_MOVE.
多くの場合、これら 3 つのイベントすべてが同時に起動され、OnTouch リスナーがトリガーされます。このリスナーを使用して (startActivity() に渡された Intent を介して) アクティビティを起動すると、アクティビティで OnCreate を複数回 (この例では 3 回) 呼び出すこの動作を再現できます。
アクティビティの開始に使用しているのがこのリスナー タイプでない場合は、アクティビティをトリガーしているリスナーのドキュメントを調べて、同様のシナリオが発生しているかどうかを確認することをお勧めします。1 つのイベントだけがリスナーをトリガーするわけではありません。