Мое Android-приложение Transdroid предлагает несколько виджетов для домашнего экрана. Каждый AppWidget имеет 2 «кнопки» (ImageButton), один запускает приложение, а другой запускает какое-то действие, которое обновляет содержимое AppWidget. Довольно просто Здесь - скриншот. Код виджета находится на моем сайте Google Code, но самое главное:
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 виджета не вызывается после перезапуска процесса Home, и, следовательно, PendingIntents, используемый для добавления функциональности к кнопкам, теряется.
Это довольно легко воспроизвести.
- Запустить эмулятор
- Добавить виджет (который использует PendingIntent, скажем, для начала действия)
- Нажмите на кнопку, чтобы увидеть, как она на самом деле работает
- Принудительно уничтожить домашний процесс ('adb -e shell kill 96', где 96 - PID android.process.acore)
- Кнопка виджета больше не работает.
Точнее: нет onReceive и, следовательно, не вызывается onUpdate при перезапуске процесса Home android.process.acore Home. В свою очередь, намерение не прилагается.
Кто-нибудь испытывал такую же проблему и знает, как обойти эту проблему?