我正在开发一个小部件,我注意到安卓系统在重新启动设备时发出一条消息,小部件已停止工作。在30分钟后收到下一次更新后,它将继续正常工作。如何调试导致小部件在重新启动时崩溃的原因,或者更好的是,如何避免在重新启动后崩溃。
好的。因此,经过几个小时的努力,我终于找到了一个解决方案(至少对我有效)。
在onReceive中,我正在执行以下操作:
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
if ("ACTION_BUTTON2_CLICKED".equals(intent.getAction())){
ComponentName thisWidget = new ComponentName(context, StackWidgetProvider.class);
int appWidgetIds[] = mgr.getAppWidgetIds(thisWidget);
Toast toast = Toast.makeText(context, "Refreshing data. Please wait.", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
//onUpdate(context, mgr, appWidgetIds);
mgr.updateAppWidget(appWidgetIds, new RemoteViews(context.getPackageName(), R.layout.widget_layout));
mgr.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.stack_view);
onUpdate(context, mgr, appWidgetIds);
} else if ("ACTION_BUTTON3_CLICKED".equals(intent.getAction())){
Intent intent1 = new Intent(context, SettingsActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
} else {
ComponentName thisWidget = new ComponentName(context, StackWidgetProvider.class);
int appWidgetIds[] = mgr.getAppWidgetIds(thisWidget);
onUpdate(context, mgr, appWidgetIds);
}
super.onReceive(context, intent);
onReceive和重新启动不能很好地配合在一起。我检查了一下,如果onReceive在重新启动后一分钟内被调用,请不要对此采取行动。在onReceive中执行任何其他操作之前进行以下检查似乎已经解决了这个问题。
if (SystemClock.elapsedRealtime() < 60000){
return;
}