私のAndroidアプリTransdroidは、いくつかのホーム画面ウィジェットを提供しています。すべてのAppWidgetには2つの「ボタン」(ImageButton)があり、1つはアプリを起動し、もう1つはAppWidgetコンテンツを更新するアクティビティを開始します。ものすごく単純。これがスクリーンショットです。ウィジェットコードは私のGoogleCodeWebサイトにありますが、最も重要なのは次のとおりです。
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_15);
views.setOnClickPendingIntent(R.id.widget_action, PendingIntent.getActivity(context, 0, new Intent(context, Transdroid.class), 0));
appWidgetManager.updateAppWidget(id, views);
問題は、ホームプロセスの再起動後にウィジェットのonUpdateが呼び出されないため、ボタンに機能をアタッチするために使用されるPendingIntentsが失われることです。
再現するのはかなり簡単です。
- エミュレータを起動します
- ウィジェットを追加します(たとえば、PendingIntentを使用してアクティビティを開始します)
- ボタンをクリックして、実際に機能することを確認してください
- ホームプロセスを強制的に強制終了します(「adb-e shell kill 96」、ここで96はandroid.process.acoreのPIDです)
- ウィジェットのボタンが機能しなくなりました。
より正確には、android.process.acoreホームプロセスが再起動されたときにonReceiveが呼び出されないため、onUpdateは呼び出されません。次に、インテントはアタッチされません。
誰もが同じ問題を経験し、この問題を回避する方法を知っていますか?