2014-03-07 32 views
0

我想要建立連接到藍牙設備的Android應用程序,並打印UI Thread「連接」,如果設備成功connceted。 但我不知道如何轉移線程之間的值 有人可以幫助我嗎?我如何更新從線程的uithread

回答

0

你有幾種方法。最簡單的方法是使用Activity.runOnUiThread()方法(有關更多信息,請參閱here)。

您也可以使用Handler s完成此操作,它可以將兩個不同的Thread s相互通信。您在UI線程中定義Handler,將其傳遞給處理程序,然後使用它將消息發送到UI Thread。一個很好的例子可能是here。您也可以使用當地BroadcastReceiver。你只需在你想要處理數據的地方定義接收器(如此,UI線程)並在這裏處理任何你想要的東西。一個很好的例子是here

2.後者基於Intent S,所以你需要確保數據你傳遞工具SerializableParcelable或者是Intent支持的數據類型。

---- ----編輯

要更新TextView,用你的Thread內是這樣的。它會在你UI線程中運行所需的行動,所以你就能毫不費力地從Thread更新View S:

try { 
    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     TextView tv = (TextView) findViewById(R.id.your_textview); 
     tv.setText("My text updated within a Thread"); 
    } 
    }); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
+0

謝謝您的回答,但我不明白如何訪問我的T如果使用在UI上運行的連接活動extView方法 – user3320803

+0

我更新了我的答案,看看它是否可以幫助你。 – nKn

0

儘量使用靜態變量是最簡單的方法

1

如果你只是想顯示UIThread

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); 
    } 
}); 

乾杯請發表您的代碼,我會更新的答案。

0

使用處理程序將消息發佈到主線程。在onHandlemessage()你可以更新主線程的用戶界面。您無法從線程更新主線程UI。

使用thisthis處理程序引用的鏈接。

0

張貼上面還我已經使用這個從線程更新視圖您可以選擇runOnUiThread

public void handleMessage(Message msg) { 
    super.handleMessage(msg); 
    if(msg.what == 1) { 
     changeText(); //here you can make changes on UI 
    } 
} 

只是把它從一個線程

textHandler.sendEmptyMessage(1);