1. 程式人生 > >在activity之間傳遞handler(三)

在activity之間傳遞handler(三)

續 “在activity之間傳遞handler(二)”~

要解決的問題是: 在 activity A 裡面打開了另一個activity B,在activity B 不關閉的情況下,也就是介面layout不變,發訊息給前一個activity A, activity A接收訊息,執行對應的操作。最先想用handler在activity之間傳遞訊息,現在想到其實用broadcast也可以達到同樣的目的,雖然不需要handler了。這種廣播的方式也可以保持程式碼的獨立性和私密性。
用Broacast的方法在兩個activity之間傳遞資料。假設兩個activity分別為MainActivity和OtherActivity,方法詳細步驟如下。

1.在MainActivity裡面定義廣播接收器BroadcastReceiver,並註冊。

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("TAG"," ++ broadcastReceiver++ ");
            textViewOld.append(intent.getExtras().getString("ActivityB"
) + "\n"); } };

註冊程式碼如下,OtherActivity.action是定義在OtherActivity裡面的靜態變數。

 IntentFilter filter = new IntentFilter(OtherActivity.action);
        registerReceiver(mReceiver,filter);

2.在OtherActivity裡面傳送廣播,需要定義intent,把action設定進去,再繫結要傳送的資料。這裡還定義了一個按鈕,點選按鈕,activity就傳送廣播。

 public static final
String action = "jason.broadcast.action"; buttonBroadcast = (Button)findViewById(R.id.buttonBroadcast); buttonBroadcast.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent2 = new Intent(action); intent2.putExtra("ActivityB","I am from the broadcast of activity B"); sendBroadcast(intent2); } });

3.MainActivity就收到廣播啦。將廣播裡intent的內容解析出來就可以執行對應操作了。

附Tips:
另一個activity開始時,應用就啟動了一個新執行緒,此時原來activity的執行緒並沒有停止,它繼續執行。

總結:
用了三種方法在activity之間傳遞資料,保持app的layout不變,另外的activity接收訊息執行操作:(1)static handler 的方法,用handler傳送message (2)定義application,在application作為中間媒介傳遞handler,用handler傳送message (3)用broadcast傳遞intent,intent裡面繫結資料。