3

何が起こっていますか:

  1. アプリを開き、ホームボタンを押してしばらくそのままにします。
  2. に移動しSettings > Applications > Manage Applications > Running、キャッシュされたバックグラウンド アプリのリストで自分のアプリを見つけて停止します。
  3. 次に、ホーム ボタンを押したまま、最近使用したアプリのリストから自分のアプリを選択して、もう一度実行します。

[注: これらの手順は、テスターが見ているのと同じ症状を強制する私の方法にすぎません。アプリを強制的に終了させるのではなく、通常通りにアプリに出入りするだけです。]

置いていたアクティビティで開きますが、状態が悪いです。最初の問題は、ユーザー情報を保持しているメモリがなくなったことです (これは、アプリが強制終了された場合に意味があります)。User クラスをシリアライズ可能にして、現在のユーザー オブジェクトを に格納しonSaveInstanceState、それを にロードすることで解決しましたonCreateClientConnectionManager同様に、ネットワークを再び機能させるには、自分を再作成する必要がありました。

「リロードされた」アクティビティは正常に実行され、新しく作成されたアクティビティに移動して使用できますが、アプリを強制的に停止する前に作成されたアクティビティに戻るために戻るボタンを押すと、例外が発生します。ユーザー クラスが存在しません (明らかに unparcel を実行するときの ClassNotFoundException)。

なぜこうなった?アプリが強制終了されたが、再開時にどのアクティビティに戻るかをまだ知っている場合の正しい処理方法は何ですか? アプリが実行されていないが、完全にシャットダウンされていないこの状態の名前は何ですか?

4

3 に答える 3

4
  1. 「最近のアプリ」に表示されるアクティビティを指定し、メインActivityまたはその他の「安全な」もののみを含めるようにすることができますActivity( android:excludeFromRecents)
  2. 起動時に を探すことで、「履歴から起動された」ケースを認識することができFLAG_ACTIVITY_LAUNCHED_FROM_HISTORYますIntent
于 2012-05-11T05:56:29.977 に答える
4

アプリケーションが (OS によって、またはユーザーによって強制的に) 終了されると、完全なアクティビティ スタックがクリアされます。したがって、バック スタックにはアクティビティがなく、新たに開始すると、フォアグラウンドのアクティビティがバック スタックの唯一のアクティビティになります。したがって、スタックの一番上から戻ることはできません。タスクとバック スタックで説明したように、ルート アクティビティのみを残してバック スタックがクリアされることもあります。

ユーザーが長時間タスクを離れた場合、システムはルート アクティビティを除くすべてのアクティビティのタスクをクリアします。ユーザーが再びタスクに戻ると、ルート アクティビティのみが復元されます。システムがこのように動作するのは、長い時間が経過した後、ユーザーが前に行っていたことを放棄し、新しいことを始めるためにタスクに戻る可能性が高いためです。

于 2012-05-11T05:57:31.700 に答える
1

解決策は、 User クラスを実装することでしたParcelable。理由がわかりませんが、インスタンスの状態を保存するときにユーザーをオブジェクトBundleとして配置Serializableし、最後の表示されたアクティビティが復元されたときにそれを正常に引き出すことができましたが、バックスタックのアクティビティが再起動されたときにそれを行うことができませんでしたそのバンドルにあるそのオブジェクトを処理します。

これで、アプリがバックグラウンドで強制終了されてから回復しました。両方の答えが私に多くのことを教えてくれたので、私は@avimakと@Rajeshに賛成票を投じています。ありがとう。

于 2012-05-12T02:17:58.577 に答える