「Activity.oncreate()」メソッドが複数回呼び出されるのは正常ですか

StackOverflow https://stackoverflow.com/questions/3588682

  •  01-10-2019
  •  | 
  •  

質問

OnCreateメソッドにいくつかのコードがアクティビティで、3回呼ばれていることに気付きました。それは通常の動作ですか?ありがとう。

役に立ちましたか?

解決

あなたはのドキュメントを読みたいかもしれません アクティビティライフサイクル.

OnCreateは、アクティビティの寿命ごとに1回のみと呼ばれます。しかし、あなたの活動を殺し、生き返らせる可能性のある多くの状況があります。したがって、OnCreateは再び呼び出されます。

これを適切にサポートするために、onsaveinstanceStateで状態情報を保存し、作成する状態バンドルから復元できます。

他のヒント

予想されるケース以外に、新しいスレッドを作成しているか実行可能なアクティビティ(Create)のみが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 -1。android.view.motionevent.action_up 2. android.view.motionevent.action_down 3. android.view.motionevent.action_move。

多くの場合、これらの3つのイベントはすべて同時に発砲し、Ontouchリスナーをトリガーします。このリスナーを使用してアクティビティを起動する場合(StartActivity()に渡された意図を介して)、この動作を複数回作成するこの動作を複数回再現できます(この例では3)。

アクティビティを開始するために使用しているこのリスナータイプではない場合は、リスナーがアクティビティをトリガーしているためにドキュメントを調べて、同様のシナリオを経験しているかどうかを確認することをお勧めします。 1つだけのイベントがリスナーを引き起こすだけではない可能性があります。

私は同様の問題を抱えていましたが、それはMobileadsによって引き起こされました。以前に初期化した後 super.onCreate(...) 問題はなくなりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top