Android - AppWidget的待定意图不会触发

时间:2011-10-21 00:22:08

标签: android android-widget

我有一个app小部件,其中有一个Button的布局。 单击该按钮时,会触发一个调用我的广播接收器的意图。

它工作得很好,但偶尔使用任务管理器中的“清除内存”按钮后,小部件卡住了 - 点击它什么都不做。但是如果它正在运行,它仍然可以从我的应用程序接收更新。

我不确定未触发未决意图的事实是内存清除错误还是我的错。 无论如何,这是代码:

注册待定意图(app小部件的onUpdate方法)

    Intent intent = new Intent(context, ServiceControl.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget);
    views.setOnClickPendingIntent(R.id.appwidgetbutton, pendingIntent);

然后使用视图更新小部件。

以下是app widget提供程序的解除:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dp"
android:minHeight="72dp"
android:initialLayout="@layout/appwidget"
android:updatePeriodMillis="0">
</appwidget-provider>

我不希望系统调用窗口小部件更新,我只从我的应用程序本身更新它。

那么为什么挂起的意图会停止发射?

提前致谢。

1 个答案:

答案 0 :(得分:1)

@Jong

@CommonsWare

大家好,我想通了。 Ofc这是一个Android问题,接收器应该总是收到。 现在如何解决它?显然所有的小部件都在工作,所以一定有一个简单的小部件。

我在某处读到了SO(试图找到那个人),提醒我们所有小部件类实际上都在扩展BroadcastReceiver。

因此,您可以注册窗口小部件(在清单中)以接收威胁本身。因此整个系统在AppWidgetProvider的类实例中是自包含的。

现在,为了与应用程序进行通信,您可以在onReceive中调用应用程序的任何静态类,如果应用程序处于活动状态,LocalBroadcastManager也不会让您失败。如果它没有激活,你的按钮应该开始活动了!

如果您需要代码,我可以详细说明。