2015年6月12日金曜日

状態の変更をバックグラウンドのActivityに伝える方法はどれがいいんだろう?

Activity A
- リストを持つ、リストの項目には favorite ボタンがある
- リストの項目をタップすると Activity B に遷移する

Activity B
- favorite ボタンがある

このとき、Activity B で favorite ボタンの状態が変わったことを Activity A に伝えて Activity A の見た目を変えたい

Activity A に伝える方法は何が最適なんだろう?

1) otto/EventBus 系
2) BroadcastReceiver
3) フラグ(SharedPreferenceとか)を書き換えて、onStartでリロードをかける
4) onActivityResult でリロードをかける
5) Service で Binding(Serviceにキャッシュさせて onStart で毎回 Service から取得)
6) CursorLoader(cursor.registerContentObserver() を使って状態を監視している)
7) その他


悩ましい...

1)

otto/EventBus 系のエントリって、onResume() や onStart() で register して onPause() や onStop() で unregister しているものが多い、この場合 Activity A はバックグラウンドに回ってしまうので、使用例として適切ではないのかもしれない?
ちなみに EventBus の HOWTO では onStart() で register して onStop() で unregister している。
otto のサンプル では onResume() で register して onStop() で unregister している。

2)

コードが見づらくなりそう?
(バックスタックの Activity を全部消したいときとかに使ってるらしい)
これも onResume() で register して onPause() で unregister するのがセオリーなんだろうなと思うんだけど、https://developer.android.com/training/run-background-service/report-status.html のサンプルは onCreate() で register して onDestroy() で unregister してた。ただわりと前のサンプルなのでなんとも言えない。

3)

わりと素直にかけそうだけど、ルールが見えづらいかも

4)

これのために startActivityForResult にするのもどうなんだろう

5)

これだけのために Service かー

6)

ContentProvider のデータを表示するときはこれが楽。ただし、ローカルデータだけならいいけど、サーバーが絡むと同期問題が...



0 件のコメント:

コメントを投稿