2011-12-23 21 views
0

私のappwidgetとアクティビティの間のIPCメカニズムとしてMessengerを使用しようとしています。バンドルからメッセンジャーが消えるonCreate

私は以下のことをします: 私のappwidgetでボタンがクリックされたときに特定のアクティビティを開始するインテントを作成します。私は私のウィジェットのボタンをクリックすると、私は私が持っている唯一の余分なデータがFlashlightModule.Type例えばあることがわかりますバンドルを見てみると

intent = new Intent(mContext, TorchLightActivity.class); 
intent.putExtra(RPC, new Messenger(mHandler)); 
intent.putExtra(TYPE, mType); 
... 
final PendingIntent actionPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0); 
remoteView.setOnClickPendingIntent(layout, actionPendingIntent); 

活動が

onCreate(...) 
final Bundle bun = getIntent().getExtras(); 
// Get null here 
mMessanger = (Messenger) bun.get(FlashlightModule.RPC); 
// Working great 
mType = bun.getInt(FlashlightModule.Type); 

を起動しますint値

意図は最初からエキストラを使用して作成された(Get the intent from onCreate in Androidを参照)とのsetDataは最初から使用されている(Application widget with bundle?を参照)

は、それは私自身の活動にAppWidget間Messengerを渡すために、すべてのことは可能ですか?

ありがとうございます。

+0

私は奇妙な振る舞いを見つけました。おそらく誰かがそれに光を当てることができます。私は同じ目的からそれを区別するためにintDataにsetDataを使用しています(私は同じアクティビティを使用していますが、別のエキストラを使用しています)。 setDataを突然削除すると、パーセルは正しく渡されます。 –

答えて

0

私は、appwidgetとアクティビティの間でIPCメカニズムとしてMessengerを使用しようとしています。

これは意味をなさない。

あなたのAppWidgetProviderインスタンスは数ミリ秒間存続します。それ以上の時間は間違っています。 Messengerやその他の方法であなたの活動に「IPC」を使用する機会は決してありません。

また、あなたはおろかMessenger、あなたのHandlerようなあなたが(AppWidgetProviderためonUpdate()上)onReceive()の最後を超えて生きることを期待している(AppWidgetProviderなど)BroadcastReceiverから何かを、作成することはありません。

あなたのアクティビティがアプリウィジェットのUIを更新したい場合は、RemoteViewsを作成してアプリウィジェットを更新できます。

+0

私は十分に自分自身を説明しませんでした。メッセージを受け取るオブジェクトは静的オブジェクトの一部として存在するため、プロセスが存続する限り存続します。私の場合のAppWidget BroadcastReceiverは何もしません。 –

+0

@EfiMK: "メッセージを受け取るオブジェクトは静的オブジェクトの一部として存在するため、プロセスの存続期間中存続しますが、" HandlerまたはMessengerは必要ありません。あなたがそれを話す必要があるときに "静的オブジェクト"のメソッドを呼び出すだけです。 – CommonsWare

+0

同意すると、あなたに明白なことを伝えるために他の人が必要になることがあります。しかし、その小包がなぜエクストラの一部ではなかったのか分かりますか? –

関連する問題