Android:oncreate()は複数回呼び出される(そして私ではない)
-
29-09-2019 - |
質問
今はよくわからないことがあります。
私のメインアクティビティクラスは、TCP接続を待つ新しいスレッドを作成するサービスを作成します。入ったら、新しいアクティビティを開始します。
Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class);
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress());
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);
その後、 onCreate()
そのクラスの方法が実行されます。 2つのスレッドが作成されます:1つのレコードとデータの送信、もう1つはデータを受信および再生します。これらのスレッドには、ループ中は永遠にあります。
何らかの理由で、私はそれに気づきます onCreate()
その最後のクラスの再び呼び出されると、プログラムがクラッシュします。 2つのスレッドのみが実行されているため、なぜユーザーの相互作用がないので、なぜそれが再び呼び出されるのかわかりません。ドキュメントには、「アクティビティが最初に作成されたときに呼び出されます。」と書かれています。アクティビティはすでに実行されており、私はそれを作成しようとはしていません。
誰かが私にこの行動を説明してもらえますか?
解決
Androidは、特定の「デバイス構成の変更」後にアクティビティを再現します。そのような例の1つはオリエンテーションです。こちらをご覧ください...http://developer.android.com/guide/topics/resources/runtime-changes.html
おそらく、あなたのスレッドの何かが構成の変更と見なされる何かをしているのでしょうか?
その場合は、代わりにアプリケーションクラスを拡張し、そこで初期化を行うことが有用であると思われるかもしれません。この投稿を参照してください...アクティビティは回転アンドロイドで再起動します
Hth
他のヒント
いくつかのSamsungデバイスで2回呼ばれるアクティビティを経験していました。 Android:launchMode = "singleInstance"をマニフェストのアクティビティタグに追加することを解決しました。これが役立つことを願っています。
これは、開発者オプションのアプリセクションで「アクションを保存しない」を使用したときに一度起こりました。これをオフにしたことを確認してください。
意図の価値を持つアクティビティを開始しようとしているとき、私はこの問題を観察しました。
以下は、Activity_aがActivity_Bを呼び出し、Activity_Bで収集する意図で値を渡す例です。
Intent intent = new Intent(this, activityB.class);
intent.putExtra("val1", someValue1);
intent.putExtra("val2", someValue2);
intent.putExtra("val3", someValue3);
this.StartActivity(intent);
この場合、を設定できます android:launchMode="singleInstance"
また android:launchModel="singleTop"
AndroidManifest.xmlおよびActivity_Bでは、1回しか起動しません。お役に立てれば。