【问题标题】:Decoupled AppWidget Intents after Home process restartHome进程重启后解耦AppWidget Intents
【发布时间】:2010-02-08 10:50:53
【问题描述】:

我的 Android 应用程序 Transdroid 提供了多个主屏幕小部件。每个 AppWidget 都有 2 个“按钮”(ImageButton),一个启动应用程序,一个启动一些刷新 AppWidget 内容的活动。很简单。 Here 是截图。小部件代码在我的 Google 代码网站上,但最重要的是:

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 丢失了。

复制起来相当容易。

  1. 启动模拟器
  2. 添加一个小部件(使用 PendingIntent 来启动一个活动)
  3. 点击按钮查看实际效果
  4. 强制终止主进程('adb -e shell kill 96' 其中 96 是 android.process.acore 的 PID)
  5. 小部件的按钮不再起作用。

更准确地说:当 android.process.acore Home 进程重新启动时,不会调用 onReceive,因此不会调用 onUpdate。反过来,没有附加任何意图。

有人遇到过同样的问题并且知道如何规避这个问题吗?

【问题讨论】:

  • 在什么实际情况下,您希望 Home 进程重新启动,而不会导致设备重新启动?
  • 这似乎发生在设备内存不足时。它会终止主进程以释放空间,但是当稍后返回主屏幕(并因此再次自动启动主进程)时,我的小部件没有更新。

标签: android android-appwidget homescreen


【解决方案1】:

我刚刚测试了几个我自己的 appwidgets,它们的点击事件在杀死 acore 后工作正常。这是我的相关代码:

    final RemoteViews views = new RemoteViews(context.getPackageName(), layoutId);
    views.setOnClickPendingIntent(R.id.widget_view, PendingIntent.getActivity(
            context, 
            0, 
            new Intent(context, MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
            PendingIntent.FLAG_UPDATE_CURRENT));

我可以看到的主要区别是与意图相关的标志;我会说他们绝对值得一试。 [我代码中的layoutId参数设置为elsewere;相同的代码用于具有不同布局的多个小部件]。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多