0

私のアプリには、A、B、Cの3つのアクティビティがあります。アクティビティAがメインのアクティビティです。

を使用してAからアクティビティBを開始するとIntent、Aは自動的に破棄されます。ただし、Bを起動したときにAが終了していません。次に、デバイスの戻るボタンを押すと、Aが使用を開始し、戻るonCreateためにを使用していないため、すべてのデータが失われましたIntent

BからCを開くときにも同じことが起こります。

button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startActivity(new Intent(ActivityA.this,
                        ActivityB.class));
            }
        });

どうしたの?これを修正するにはどうすればよいですか?

4

3 に答える 3

4

これは、アクティビティが自動的に破壊していたため、私が間違えたものです。下のオプションをチェックしましたSetting=>Developer Option=>Don't Keep Activities。そのため、ユーザーが離れるとすぐにすべてのアクティビティが破棄されます。

ここに画像の説明を入力してください

このオプションのチェックを外すと、私のアプリは正常に動作します。

于 2014-03-21T11:11:46.017 に答える
2

'アクティビティB'を使用して、ある種の1回限りの結果を取得している場合は、startActivityForResult構成を使用する必要があるように思われます。[ドキュメント](http://developer.android.com/reference/android/app/Activity.html#startActivityForResult (android.content.Intent 、int))を参照してください

ただし、「アクティビティA」に関する状態情報をどこにも保持せずに維持するには、すべての情報(ユーザーが入力したフィールドなど)Intentを「アクティビティB」に渡されるバンドルにバンドルします。このバンドルは「アクティビティB」onCreate(およびその他のいくつかのライフサイクルポイント)に配信され、「アクティビティB」から関連情報を入力し続け、その情報をインテントバンドルに書き戻してから、「アクティビティA」を変更されたバンドルで再開できます。 'アクティビティB'が終了したとき。しかし、ここにドラゴンがいます。この特定のメカニズムは、バックスタックを厳密に(間違った?)制御するアプリで採用されています。具体的には、「アクティビティA」には、次の特別なマニフェスト宣言があります。android:noHistory="true"onBackPressed()これは、各アクティビティでオーバーライドし、同じバンドルを先ほどのアクティビティの新しいインスタンスに送信することで、戻るボタンが押されたときに何が起こるかを制御することも意味します。通常のバックスタックのように見えますが、その情報をどこにも保持せずにユーザー入力を記憶したいので、それは使用可能なソリューションです。

これにより、ウィザード入力の各段階が独自のアクティビティであり、検証された正しい情報のみが最後に保持される、ウィザードのような入力が可能になります。

別の方法として、「アクティビティA」のデータをSharedPreferences領域に一時的に保存して、アクティビティAを再起動したときに、「アクティビティA」を離れたときの元の状態を再構築する適切なビットを引き出すことができます。AndroidがアクティビティAを強制終了する場合にできることはほとんどありませんが、ここで概説するアプローチを使用すれば、非常に合理的な強制終了に対応できます。

于 2013-03-01T14:22:36.633 に答える
1

多分あなたの活動を破壊しているのはあなたではありません。

アクティビティライフサイクルに関するページから:(エンファシスマイン)

アクティビティが一時停止または停止した場合、システムは、アクティビティの終了を要求するか、単にプロセスを強制終了することにより、アクティビティをメモリから削除できます。ユーザーに再度表示された場合は、完全に再起動して以前の状態に復元する必要があります。

システムがアクティビティプロセスを強制終了する可能性があるという明示的な記述があります。

デバイスのメモリが不足している、またはアクティビティがメモリを大量に消費しているためにシステムがデバイスを強制終了している可能性があります。

編集

データを維持するために、たとえデータが破壊されても、アクティビティの合間に。1つの方法は、Applicationクラスを使用することです。データを永続化するための、Android Applicationクラスの使用に関するこの回答を確認してください。おそらく、それがあなたが探しているものです。

于 2013-03-01T13:59:28.083 に答える