6

アプリケーション内にアクティビティ(A、B、C)があります。アプリケーションアクティビティAを開始すると、次のようになります。

  A:onCreate()
  A:onStart()
  A:onResume()

インテントを使用して、2番目のアクティビティ(A-> B)を呼び出しています:

  A:onPause()
  B:onCreate()
  B:onStart()
  B:onResume()
  A:onStop()

次に、[ホーム]ボタンをクリックして、アプリをバックグラウンドに移動します。

  B:onPause()
  B:onStop()

1〜2時間後、もう一度デバイス内のホームページに移動し、次のように実行されるアプリアイコンをクリックします。

 B:onDestroy()
 A:onRestart()
 A:onStart()
 A:onResume()

しかし、私はこのように終了したアクティビティを1つ実行する必要があります。

B:onRestart()
B:onStart()
B:onResume()

表示されなくなったためにシステムによってアクティビティが強制終了されたという記事をいくつか読んだことがありますが、問題を解決する方法はありますか?

前もって感謝します...

4

2 に答える 2

10

ここで 2 つの異なることを混同している可能性があります。

  1. メモリが必要な場合、Android はアクティビティを強制終了しません。それが行うことは、アクティビティが実行されているプロセス全体を強制終了することです。一般に、これは Android がこの状況ですべてのアクティビティを強制終了することを意味します。ただし、アクティビティ スタックは記憶されており、ユーザーがアプリケーションに戻ると、Android は新しいプロセスを作成し、各アクティビティを (必要に応じて) 再作成します。アクティビティ スタックの一番上にあったアクティビティを再作成することから始めます (つまり、ユーザーがアプリケーションを離れた場所)。

  2. Android は、ユーザーが長期間 (30 分程度だと思います)タスクを離れた場合、ユーザーはそのタスクにもはや興味がなく、ユーザーがアクティビティ スタックのどこにいたかを覚えていても意味がないと想定しています。彼はおそらくもう気にしないので、そのタスク。この場合、ユーザーがタスクに戻る (または、そのタスクのアクティビティ スタックの一番上にあったアプリケーションを再起動する) と、Android は単純にタスクをルート アクティビティにクリアしますこれには、アプリケーションが最初からやり直しているように見える効果があります。これは望ましい (そして文書化された動作) です。

やりたいことは、Android がシチュアリオン #2 でタスクをクリアしないようにすることです。あなたは追加することによってそれを行います

    android:alwaysRetainTaskState="true"

ルート アクティビティ<activity>タグに追加します (つまり、アプリケーションを開始するアクティビティで、 と の付いたアクティビティ) 。ACTION_MAINCATEGORY_LAUNCHER

于 2012-07-26T16:54:35.227 に答える
1

これはあなたが確実にコントロールできるものだとは思いません。アクティビティが長時間バックグラウンドにあり、その間に他のアプリケーションがメモリを必要とする場合、システムはアクティビティを強制終了してメモリを解放します。

于 2012-07-26T08:43:23.383 に答える