2012-09-07 101 views
0

我在更新服務中的AppWidget時遇到問題。這個問題對我來說似乎完全不合邏輯,所以我做了一個TestService來查找錯誤。 這是我testlayout我使用:爲什麼SystemClock.sleep(x)阻止更新AppWidget?

<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始終文字: 「SomeText」 則會,但它應該是「文本延遲後「在我的觀點。如果我刪除那條線SystemClock.sleep(1000),我會得到「延遲後的文本」。爲什麼是這樣? (已測試)Samsung Galaxy Nexus(4.1.1)

回答

0

我發現,它可以被認爲是我的手機(GalaxyNexus)發生的一個錯誤,重新啓動手機會以某種方式修復它。 '好老'Windows時代,「你是否試圖打開和關閉它」