2013-05-02 106 views
1

我實現了一個由四個活動(A,B,C,D)組成的Android應用程序。Android:使用處理程序更新UI

A call B; B調用C和C調用D.

活性的實現一個Handler

Handler handler=new Handler(){ 
     public void handleMessage(Message msg){ 

      Bundle bundle = new Bundle(); 
      bundle = msg.getData(); 
      String key = bundle.getString("Changed"); 

      if(key.compareTo("NotificationType") == 0){ 
       String completeStr = bundle.getString(key); 

       if(completeStr.compareTo("Message") == 0) 
       { 
          // update UI of Activity A 
         } 
       } 
     } 
    }; 

的活動d可以使用哈德勒發送messagge。

的問題是:

如果活動A是在後臺當從活動d發送的郵件,會發生什麼?

如果活動A在通過處理程序接收到消息之前被銷燬,會發生什麼?

+0

你的問題不清楚你爲什麼要與活性的在d困擾? – waqaslam 2013-05-02 07:44:50

+0

現在更清楚了嗎? – GVillani82 2013-05-02 07:47:49

回答

5

使用自定義BroadcastReceiver

寫這篇文章ActivityD.java

Intent intent = new Intent(); 
intent.putExtra("message","hi"); 
intent.setAction("com.android.activity.SEND_DATA"); 
sendBroadcast(intent); 

寫這篇文章ActivityA.java

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 
    Log.d("receiver", "Got message: " + message); 
    } 
}; 

更新

現在註冊Receiver

registerReceiver(mMessageReceiver, 
    new IntentFilter("com.android.activity.SEND_DATA")); 
+0

謝謝@Rstar。因此,我可以爲每個需要接收消息的活動實施BroadcastReceiver,而不用擔心活動狀態。對? – GVillani82 2013-05-02 07:56:26

+0

@ Joseph82是的,你可以但不完成你的活動 – 2013-05-02 07:58:49

+0

好@Rstar。但是,如果活動在使用BroadcastReceiver接收消息之前被銷燬,那麼當再次創建活動時,會收到消息?或按摩失去了? – GVillani82 2013-05-02 08:02:12