我有一个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>
我不希望系统调用窗口小部件更新,我只从我的应用程序本身更新它。
那么为什么挂起的意图会停止发射?
提前致谢。
答案 0 :(得分:1)
@Jong
@CommonsWare
大家好,我想通了。 Ofc这是一个Android问题,接收器应该总是收到。 现在如何解决它?显然所有的小部件都在工作,所以一定有一个简单的小部件。
我在某处读到了SO(试图找到那个人),提醒我们所有小部件类实际上都在扩展BroadcastReceiver。
因此,您可以注册窗口小部件(在清单中)以接收威胁本身。因此整个系统在AppWidgetProvider的类实例中是自包含的。
现在,为了与应用程序进行通信,您可以在onReceive中调用应用程序的任何静态类,如果应用程序处于活动状态,LocalBroadcastManager也不会让您失败。如果它没有激活,你的按钮应该开始活动了!
如果您需要代码,我可以详细说明。