2010-01-28 37 views
3

如果我想發送一個事件,例如OnClick,從一個線程的活動?謝謝。是否可以將事件從線程發送到活動?

預期的工作流程低於:

public class HelloAndroid extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Crate threadA 
     Start threadA 
    } 

    public void OnSomeEvent() { 
     do something that changes the views in this activity; 
    } 

    private class ThreadA extends Thread { 
     public void run() { 
      do something ... 

      Send Some Event to Activity HelloAndroid. 
     } 
    } 

回答

1

您將不得不使用處理程序來更新UI。

+0

是的,我意識到處理程序可以做我需要的。謝謝。 – user256239 2010-01-28 18:25:29

+0

有沒有人有例如處理程序的例子。 Toast在由擴展ATask的類觸發的Activity上顯示? – 2013-04-05 14:25:09

0

如果我理解正確的話,你想從你的內心ThreadA類調​​用的方法HelloAndroidOnSomeEvent(),對不對?

如果是這種情況下你可以正確的:

private class ThreadA extends Thread { 
    public void run() { 
     HelloAndroid.this.OnSomeEvent(); 
    } 
} 

或者更簡單,只需調用OnSomeEvent()方法直接。

+1

OnSomeEvent()將具有更改U​​I組件的代碼,但不允許在UI線程之外的其他線程中更改UI組件。所以,你的建議是行不通的。 – user256239 2010-01-28 06:44:14

4

你總是可以從一個線程將消息發送到活動中,這樣的:

//this should be in your Activity class 
private Handler SomeHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     ReactOnMessage(); 
    } 
}; 


private class SomeThread implements Runnable { 
    public void run() { 
     doSomething(); 
     SomeHandler.sendEmptyMessage(0); 
    } 
} 

您還可以創建消息,其中將包含一些值。

相關問題