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

在activity之間傳遞handler(一)

最近在研究基於安卓系統的語音識別和藍芽通訊,過程中涉及到多個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。