Android AppWidget-奇怪的睡眠模式
可能是个新手问题。我尝试过使用android AppWidgetProvider onUpdate方法,并使用睡眠来诱导一点延迟 使用循环重复更新-问题是:循环计数器设置为20,睡眠时间设置为1秒-循环仅执行10次-900毫秒每秒延迟将循环增加到12,延迟500毫秒将获得20的完整循环计数。这是怎么解释的 请参阅下面的AppWidgetProvider代码。小部件仅包含一个textviewAndroid 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 {
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秒更新一次小部件,请使用并计划定期的更新意图广播,或者启动一个新线程来进行计时