2011-12-23 3 views
0

내 appwidget과 활동 사이에 IPC 메커니즘으로 Messenger를 사용하려고합니다.번들에서 메신저가 사라짐 onCreate

다음을 수행합니다. 내 앱 위젯에서 버튼을 클릭 할 때 특정 활동을 시작하는 인 텐트를 만듭니다. 내 위젯 버튼을 클릭하면 내가 가지고있는 유일한 여분의 데이터가 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은

내 자신의 활동에 AppWidget 사이의 메신저를 통과하는 모든 가능 (Application widget with bundle? 참조) 처음부터 사용?

감사합니다.

+0

이상한 행동을 발견했습니다. 어쩌면 누군가가 그것에 대해 밝힐 수 있습니다. 비슷한 의도와 구별하기 위해 의도에 setData를 사용하고 있습니다 (동일한 액티비티를 사용하지만 다른 엑스트라를 사용하고 있습니다). setData를 갑자기 제거하면 소포가 올바르게 전달됩니다. –

답변

0

내 appwidget과 활동 사이에 IPC 메커니즘으로 Messenger를 사용하려고합니다.

이것은 의미가 없습니다.

귀하의 AppWidgetProvider 인스턴스는 몇 밀리 초 동안 계속됩니다. 더 이상 오랫동안 그것을 잘못하고있는 것입니다. Messenger이나 다른 방법을 통해 귀하의 활동에 "IPC"를 사용할 수있는 기회는 결코 없습니다.

또한, 당신은 커녕 Messenger, 당신의 Handler 등이합니다 (AppWidgetProvider에 대한 onUpdate()에) onReceive()의 끝을지나 살기를 기대하고있다 (AN AppWidgetProvider 등)을 BroadcastReceiver에서 뭔가를 작성해서는 안됩니다.

귀하의 활동이 앱 위젯의 UI를 업데이트하고 싶다면 RemoteViews을 생성하고 앱 위젯을 업데이트 할 수 있습니다.

+0

나는 충분히 자신을 설명하지 않았다. 메시지를받는 객체는 정적 객체의 일부로 살아 있으므로 프로세스가 살아있는 한 계속 살아 있습니다. 필자의 경우 AppWidget BroadcastReceiver는 아무 것도하지 않습니다. –

+0

@EfiMK : "메시지를받는 객체는 정적 객체의 일부로 살아 있기 때문에 프로세스가 살아있는 한 계속 살아 있습니다."하지만 확실히 Handler 나 Messenger는 필요하지 않습니다. 대화 할 필요가있을 때 "정적 객체"에 메서드를 호출하면됩니다. – CommonsWare

+0

동의하십시오. 가끔은 분명히 말할 다른 누군가가 필요합니다. 하지만 그 소포가 왜 엑스트라의 일부가 아니 었는지 아십니까? –