2011-03-05 58 views
0

我有一個服務,它通過一些自定義事件偵聽器向活動連續發送值。更新UI和來自事件

這裏一切工作正常。某些值按預期顯示在我的活動中,但有些值會使應用程序崩潰。這是因爲一些傳入數據是在普通線程內計算的(我無法訪問它來更改它),而且我知道我必須在這裏使用一個處理程序,但是據我測試該應用程序仍然崩潰。

更生動,我想做到以下幾點

onValuesChanged(float val) { 
    myTextView.setText(Float.toString(val)) 
} 

其中val在一個正常的線程計算,當然它使崩潰的應用程序做的setText時。

有什麼建議嗎?

回答

1

使用AsyncTask而不是Thread並在onPostExecute()中可以更新UI。

或使用Activity.runOnUiThread(新的Runnable(){ 無效的run(){// 做一些有趣的事情 } 。});

+0

我不能改變它,因爲它是在一個封閉的庫。不知何故,我必須得到這個價值,並在它之間做一些「魔術」才能夠更新UI。 :( – biquillo 2011-03-05 04:07:54

+0

@biquillo更新。 – 2011-03-05 04:18:59

+0

謝謝奇妙的作品! – biquillo 2011-03-05 04:31:01

1

哎U可以從服務發送自定義播放這樣

Intent mintent = new Intent(); 
    mintent.setAction("com.action"); 
    mintent.putExtra("name", "value"); 
    sendBroadcast(mintent); 

並註冊您的活動的接收器將得到進入的意圖值,然後調用處理這樣的更新UI。 .plese解析INT串在接收

myTextView.post(new Runnable() { 

     public void run() { 
     myTextView.setText(Float.toString(val)) 

     } 
    }); 

每次發送廣播到您的活動,它會更新UI .. 但是上述方法也是正確的,但如果你必須留在服務然後去t他的方式上面......