2016-07-28 55 views
0

我是Android新手。我試圖做一個單獨的線程(SenderThread)。該線程旨在每按下一個按鈕時在UDP套接字中每200毫秒發送一個字符串。Android如何在工作線程中調用button.isPressed()

所以我的問題是我怎麼可以這樣做:

if(myButton.isPressed()) 
{ 
} 

,但不是在UI線程?


如果可能我想在UI線程的OnCreate方法中啓動SenderThread。

然後,在SenderThread中,我想驗證每個200ms是否按下按鈕。如果是,我通過UDP發送一個字符串,否則我等爲200ms

+0

當你點擊按鈕時啓動線程? –

回答

1

使用runOnUiThread裏面你thread

final Button myButton =(Button)findViewById(R.id.my_button);

runOnUiThread(new Runnable() { 
       public void run() { 
        if(myButton.isPressed()) 
        { 
        } 

       } 

      }); 
0

您需要創建一些像這樣的布爾參數:

private boolean isButtonClicked = false; 

然後在您的onClick()方法使isButtonClicked = true;

而現在您的線索,您可以檢查按鈕被點擊:

if (isButtonClicked) { 
    // button is clicked 
} else { 
    // button is not clicked 
} 
+0

你需要使它變成volatile或使用AtomicBoolean。否則它將無法工作 –

0

至於官方Android開發者網站在這篇文章中:https://developer.android.com/training/multiple-threads/communicate-ui.html你有幾個選項。

選項1:您定義連接到UI線程這樣的處理程序:

mHandler = new Handler(Looper.getMainLooper()) {} 

選項2:你可以使用一個的AsyncTask,對於在後臺運行的大多數東西效果很好。它具有可以調用的鉤子來指示進度以及完成時間。

選項3: 您也可以使用Activity.runOnUiThread()。