Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 AppWidget-奇怪的睡眠模式_Android_Widget_Sleep_Android Appwidget - Fatal编程技术网

Android AppWidget-奇怪的睡眠模式

Android AppWidget-奇怪的睡眠模式,android,widget,sleep,android-appwidget,Android,Widget,Sleep,Android Appwidget,可能是个新手问题。我尝试过使用android AppWidgetProvider onUpdate方法,并使用睡眠来诱导一点延迟 使用循环重复更新-问题是:循环计数器设置为20,睡眠时间设置为1秒-循环仅执行10次-900毫秒每秒延迟将循环增加到12,延迟500毫秒将获得20的完整循环计数。这是怎么解释的 请参阅下面的AppWidgetProvider代码。小部件仅包含一个textview public class SimpleWidget extends AppWidgetProvider {

可能是个新手问题。我尝试过使用android AppWidgetProvider onUpdate方法,并使用睡眠来诱导一点延迟

使用循环重复更新-问题是:循环计数器设置为20,睡眠时间设置为1秒-循环仅执行10次-900毫秒每秒延迟将循环增加到12,延迟500毫秒将获得20的完整循环计数。这是怎么解释的

请参阅下面的AppWidgetProvider代码。小部件仅包含一个textview

public class SimpleWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.w("on update here", " message");
        RemoteViews rm = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);
        for (int loop = 0; loop <= 20; loop++) {
            Log.w("on update here", "loop counter  =" + loop);
            rm.setTextViewText(R.id.tvWidget, "now you see it " + loop);
            for (int index = 0; index < appWidgetIds.length; index++) {

                appWidgetManager.updateAppWidget(appWidgetIds[index], rm);
                Log.w("updating", "aw number  =" + index);
            }
            try {
                Thread.sleep(2000, 0);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

您将注意到,在所有情况下,时间都接近10秒。这是因为AppWidgetProvider只是一个方便类。它简单地环绕一个广播接收器并解释小部件广播,然后调用相应的方法onUpdate等等

广播接收器必须在10秒内完成对广播的处理,否则您将收到一封电子邮件

这意味着在这里使用Thread.sleep是个坏主意。别那么做

现在还不完全清楚你想对我做什么。如果您希望每X秒更新一次小部件,请使用并计划定期的更新意图广播,或者启动一个新线程来进行计时