我从widget.But动态注册了ACTION_TIME_TICK意图的接收器.10 / 15分钟后应用程序崩溃并重启设备。以下是代码:
@Override
public void onUpdate(Context context) {
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_TIME_TICK);
context.getApplicationContext().registerReceiver(mReceiver, intentFilter);
}
我的广播接收器用于更新我的所有小部件:
public class WReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context, "[onReceive]", 5).show();
AppWidgetManager widgetMgr = AppWidgetManager.getInstance(context);
int [] widgetIds = widgetMgr.getAppWidgetIds(new ComponentName(context, WidgetManager.class));
//
for(int appWidgetId : widgetIds) {
WidgetManager.updateAppWidget(context, widgetMgr, appWidgetId, "World Clock");
}
}
}
仅适用于约15至20分钟。我应该取消注册接收器,如果是这样我应该在小部件中注册?
答案 0 :(得分:0)
在 AndroidManifest.xml
而不是onUpdate
中进行接收者注册:如果你在那里注册,你将在每次小部件提供者呼叫时重复注册相同的接收者,这将耗尽可用的您设备上的资源。
编辑:正如@haimg所指出的那样(见http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK),这实际上应该在onEnabled
而不是onUpdate
中完成。您的崩溃是因为您每次onUpdate
被调用时都会重复注册Intent,而不是一次(onEnabled
会这样做)。