0

私は2つの活動をしています。メイン アクティビティ A & アクティビティ B アクティビティ A を破棄したくありません。新しいタスクでアクティビティ B を開始しています。

public static void startActivity(Class<?> startClass) {
    Intent intent = new Intent(Constants.getActivity(), startClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Constants.getActivity().startActivity(intent);
}`
  • Constants.getActivity() は、現在のアクティビティのコンテキストを返します
  • startClass は、アクティビティ「A」またはアクティビティ「B」のいずれかです

問題は、アクティビティを作成/破棄し、リークすることです。私はそれを間違っていますか?アクティビティ「A」からアクティビティ「B」を開始するにはどうすればよいですか。逆に、必要のないときに両方をバックグラウンドに保つにはどうすればよいですか。

4

3 に答える 3

0

あなたが言ったように、あなたは活動を「生きている」状態に保つことはできません。アクティビティが一時停止されると、Androidシステムはいつでもメモリを要求してアンロードできます。

ただし、AからBに切り替えたい場合は、AとBを1つのアクティビティ内で異なるビューにすることができます。たぶんあなたはhttp://developer.android.com/reference/android/widget/ViewFlipper.htmlを見たいと思うでしょう

于 2012-10-19T08:06:14.670 に答える
0

タスクを使用する場合、クリーンアップは非常に重要です。アクティビティ内のすべてのタスクをクリーンアップする必要があります。これを読む

アクティビティに多くのクレイジーな初期化がない場合は、finishとonCreatesを使用するだけです。それ以外の場合は、アクティビティを切り替えるときにonResumeが頻繁に呼び出されることに注意してください。ここではクリーンアップが重要になります。クリーンアップしない場合、その可能性のあるアクティビティの1つ(他のクリーンアップされたアクティビティからのデッドオブジェクト参照を含む)がアクティビティスタックから戻ってきて、例外をスローする可能性があります。この種の例外をデバッグするのは非常に困難です。

于 2012-10-19T07:49:44.020 に答える
0

まず第一に、あなたは何をしようとしていますか?バックグラウンドで実行したいことは、常に UI から分離する必要があります。アクティビティは単に UI を表示するためのコンテナーであると考えてください。それ以外はすべて、永続ストレージまたは保存されたインスタンス バンドルから保存および復元できます。

ここでアクティビティのライフサイクルとサービスのライフサイクルの違いを理解することは非常に重要です。

ここで、別の質問からの回答を参照します。

OS に新しいアプリとすべての古いアプリを保持するのに十分なメモリがある場合、アプリはバックグラウンドになり、onResume と onPause の両方が呼び出されます。

  • ユーザーが見ていないときに必要な長時間実行プロセスがある場合は、サービスを使用します。

  • ユーザーが同じ状態でアプリを返す必要がある場合は、 onResume と onPause で作業を行い、状態情報を保存し、ユーザーが戻ったときに UI を再度初期化する必要があります。強制終了されるのではないかと本当に心配している場合 (まあ、バンドルを失うべきではないと思います)、アプリの SharePreferences にそれらを保存できます。

  • アプリがその特定の共有インテントからいつ戻るかを知りたい場合は、startActivityForResult を使用します。

于 2012-10-19T07:57:36.090 に答える