在activity之間傳遞handler(一)
阿新 • • 發佈:2019-02-03
最近在研究基於安卓系統的語音識別和藍芽通訊,過程中涉及到多個activity的互動。activity之間的互動資料可以由Intent完成,也可以借用Handler。如果用intent的話,一定要finish當前的activity UI,另一個activity響應,資料才得以傳遞,此時UI勢必改變。而用handler是在一個activity中控制另一個activity活動的好方法。
在activity之間傳遞handler,有多種方法。最簡單的是定義全域性靜態變數handler的方法,假設兩個activity分別為MainActivity和OtherAcitivity,實現步驟如下。
1.先在MainAcitivity 中定義靜態handler,重寫handleMessage方法來處理收到發回的handler時該做的處理。
public static Handler myHandler = new Handler(){
@Override
public void handleMessage( Message msg ){
switch ( msg.what ){
case SEND_MESSAGE:
Log.e("TAG", " ++ myHandler: SEND_MESSAGE ++");
// textViewOld.setText("handler: SEND_MESSAGE");
String temp = msg.obj.toString();
textViewOld.append(temp+"\n");
break;
}
}
};
開啟OtherActivity,這裡用點選按鈕事件觸發。
buttonOpen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openActivity();
}
});
public void openActivity(){
Intent intent = new Intent( );
intent.setComponent(new ComponentName(this,OtherActivity.class));
Bundle bundle = new Bundle();
bundle.putString("company", "new Company");
bundle.putInt("age", 15);
intent.putExtras(bundle);
startActivityForResult(intent, 200);
}
2.在OtherActivity裡面用靜態handler傳送訊息, 用myHandler獲得一個訊息,並sendToTarget。
MainActivity.myHandler.obtainMessage(MainActivity.SEND_MESSAGE,"obj from test case A").sendToTarget();
SEND_MESSAGE是在MainActivity裡面定義的全域性靜態變數,用於判別訊息來自何處。
3.在MainActivity裡面會接收到訊息。
接下來會繼續寫用 getApplication和Broadcast的方法傳遞Handler。