在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裡面繫結資料。