Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:设备重启时小部件崩溃_Android_Crash_Widget - Fatal编程技术网

Android:设备重启时小部件崩溃

Android:设备重启时小部件崩溃,android,crash,widget,Android,Crash,Widget,我正在处理一个小部件,我注意到android发出一条消息,小部件已经停止重新启动设备。在30分钟内收到下一次更新后,它将继续正常工作。如何调试导致小部件在重新启动时崩溃的原因,或者更好的是,如何避免在重新启动时崩溃。确定。所以经过几个小时的努力,我终于找到了一个至少对我有效的修复方法 在onReceive中,我正在执行以下操作: AppWidgetManager mgr = AppWidgetManager.getInstance(context); if ("

我正在处理一个小部件,我注意到android发出一条消息,小部件已经停止重新启动设备。在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;
        }