为什么SystemClock.sleep(x)会阻止更新AppWidget?

时间:2012-09-07 12:31:13

标签: android service widget sleep appwidgetprovider

我在服务中更新AppWidget时遇到问题。这个问题对我来说似乎完全不合逻辑,所以我做了一个TestService来追捕错误。 这是我使用的testlayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView android:id="@+id/testText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World"/>
</LinearLayout>

onStart(Intent, startid)的实施方式如下:

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Log.d(TAG, "onStart Service with StartId: " + startId);
    mStartId = startId;

    int widgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    if (intent != null && intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)){
        widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                                      AppWidgetManager.INVALID_APPWIDGET_ID);
    }

    if (widgetId == AppWidgetManager.INVALID_APPWIDGET_ID){
        Log.d(TAG, "invalif AppWidgetId");
        stopSelf();
    }

    RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.testlayout);
    mRemoteViews.setTextViewText(R.id.testText, "someText");
    AppWidgetManager.getInstance(this).updateAppWidget(widgetId, mRemoteViews);

    SystemClock.sleep(1000);
    mRemoteViews.setTextViewText(R.id.testText, "text after delay");
    AppWidgetManager.getInstance(this).updateAppWidget(widgetId, mRemoteViews);
}

在这个实现中,生成的Widget总是Text:“someText”,但在我的View中它应该是“延迟后的文本”。如果我删除该行SystemClock.sleep(1000),我会收到“延迟后的文字”。为什么是这样? (在三星Galaxy Nexus(4.1.1)上测试

1 个答案:

答案 0 :(得分:0)

我发现,它可以被认为是我手机上出现的错误(GalaxyNexus)。重新启动手机以某种方式修复它。就像“好老”一样。 Windows天,&#34;你试过打开和关闭它&#34;