2012年11月14日水曜日

getIntent()で取得する値を更新する

AのActivityに留まったままAlarmManagerからAへの新しいIntentを複数回 投げたところ、getIntet()で取得するIntentがActivity起動時のものから変わらない。
という事象が発生した。

BroadcastReceiverからはFLAG_ACTIVITY_NEW_TASKでstartIntent()しているので 更新すると思っていたが出来ないようだ。 
PendingIntentはPendingIntent.FLAG_CANCEL_CURRENTで作成しているので BroadcastReceiverの段階では更新されたIntentが来ているのは確認済み。

 GoogleのドキュメントによるとgetIntent()はActivity起動時の値を取得するためのもの であり、そのまま使用しても都度更新されるような作りではないよう。 

困り果てたとき、onNewIntet()なるActivityクラスのメソッドを発見。
onNewIntent()はFLAG_ACTIVITY_NEW_TASKでActivityを起動した際に onResume()の前に実行されるもののよう。
onCreate()からライフサイクルが始まる際には呼ばれない。 
このonNewIntentにはActivity起動時のIntentじゃなく更新されたIntentが 入ってくるのでsetIntent()にそれを引数に渡すことでgetIntent()の値を更新できる。


 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  //画面表示時に再度起動された際にgetIntent()を更新する。
  setIntent(intent);
 }

0 件のコメント:

コメントを投稿