10

AccountManagerでアカウントを作成するアプリケーションがあるとしましょう。ユーザーは、このアプリケーションの非常に複雑なアクティビティグラフをしばらく調べてからAccounts and Sync、Android設定に移動し、アカウントを削除してサインインします(Accounts and Sync別のユーザーとしてログインしたままです)。

ブロードキャスト用の受信機を定義しましたが、LOGIN_ACCOUNTS_CHANGEDすべてのサービスを正常にシャットダウンできます。ただし、アクティビティはまだ存在し、ヘッダーに最初のユーザーの名前が含まれています(UIはさまざまな方法で混乱しますが、これが最も明白です)。

ですから、問題は、これらの孤児の活動について何をすべきかということです。

  • のようなものを使用することもできますclearTaskOnLaunchが、変更が発生すると、すべてのアクティビティがバックグラウンドで実行されます。
  • SharedPreferencesにフラグを設定しonResume()、各アクティビティをチェックインしてから、必要に応じてアクティビティを起動しclearTaskますか?面倒すぎる。
  • 私が思いついた最良のオプションは、android.os.Process.killProcess(android.os.Process.myPid())すべてのアクティビティを強制終了するために使用することです。これはあまり優雅ではありませんが、仕事は終わります。唯一の副作用は、アクティビティスタックがまだ存在していることです。最も合理的なのはLAUNCHER、明確な履歴を持つアクティビティから開始することであると思われる場合です。

では、説明されているシナリオに対応するための最良の方法は何でしょうか?

4

2 に答える 2

5

すべてのアクティビティを、メンバーがmChangeReceiverMyActivityを持つクラスから拡張します。BroadcastReceiver

目的に応じて、 mChangeReceiverをMyActivity登録しますonCreate(および登録を解除しonDestroyます)LOGIN_ACCOUNTS_CHANGED

mChangeReceiveronAccountChanged()に、GUIの変更を反映するために、すべての拡張クラスをオーバーライドして実装する必要がある抽象メソッドを呼び出させます。

それでおしまい。これで、アカウントが変更されるたびに、すべての生活活動でonAccountChangedメソッドが呼び出され、GUIが更新されます。

于 2012-04-24T13:01:09.030 に答える
0

私はあなたがユーザーを持っているという事実に基づいていくつかのアイデアを持っています-ログインメカニズム:

UIについては、onPause時にユーザー名UI(おそらくtextview)を ""に更新し、onResume時に現在のユーザーに更新するのはどうですか?

必要に応じてアクティビティを閉じることについては、現在のユーザーをグローバル変数に、アクティビティごとに保存できます。各アクティビティは、グローバルアクティビティが、前回更新されたときに保存したアクティビティと同じであるかどうかを確認する必要があります。それらが異なる場合は、アクティビティを閉じることができます。作成したとおりにclearTaskフラグを使用することもできます。

アクティビティを処理する別の方法は、代わりにフラグメントスタックを使用することです。詳細については、フラグメントスタックのAndroidサポートの例を確認してください。

于 2012-04-28T21:42:33.223 に答える