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

在activity之間傳遞handler(二)

如果把handler定義為static,它的子成員變數和子方法都要是static屬性。一旦activity接收到handler,要處理的事件變多,則大量的變數和函式都成為static型別了,這樣非常不利於程式碼的獨立性和隱私性。這是我在研究安卓系統藍芽通訊技術時遇到的問題,所以要考慮用其它的方式在activity之間傳遞handler。
用定義application的方式傳遞handler可以保持程式碼的獨立性,方法步驟如下。要傳遞handler的activity為FirstActivity和SecondActivity。
1.定義自己的application,並在manifest.xml檔案中申明。

public class CustomApplication extends Application
{
    private static final String VALUE = "Harvey";    
    private String value;
    private Handler mHandler;    
    @Override
    public void onCreate()
    {
        super.onCreate();
        setValue(VALUE); // 初始化全域性變數
    }    
    public void
setValue(String value) //該方法用於測試application的功能特性 { this.value = value; } public String getValue() { return value; } //該方法用於儲存要傳遞的handler public void setHandler( Handler handler) { this.mHandler = handler; } //該方法用於獲取要傳遞的handler public Handler getHandler
() { return mHandler; } }

在manifest.xml檔案中,只要改application,確切地說只要加上應用名稱就可以了。

android:name = "CustomApplication"

2.在FirstActivity中定義handler,並重寫handleMessage方法。

private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case REQUEST_CODE:
                    Log.e("handler","The message from the SecondActivity is: " + msg.obj.toString());
            }
        }
    };

然後用前面定義的application儲存定義的mHandler。

app.setHandler( mHandler );

3.在SecondActivity中獲取mHandler,並用該handler獲取message傳送回target 即 FirstActivity。

mHandler = app.getHandler();
String str = "message about handler in the SecondActivity";
mHandler.obtainMessage(FirstActivity.REQUEST_CODE, 2, 3, str).sendToTarget();

4.在FirstActivity裡面會接收到訊息。

附:
前面的程式中,在FirstActivity裡面改變CustomApplication中變數value的值,在SecondActivity中,該值也改變。原來是因為: Android系統自動會為每個程式執行時建立一個Application類的物件且只建立一個,所以Application可以說是單例(singleton)模式的一個類。啟動Application時,系統會建立一個PID,即程序ID,所有的Activity都會在此程序上執行。那麼我們在Application建立的時候初始化全域性變數,同一個應用的所有Activity都可以取到這些全域性變數的值,換句話說,我們在某一個Activity中改變了這些全域性變數的值,那麼在同一個應用的其他Activity中值就會改變。
另外,application是在activity之前載入的,程式執行就會載入application的程式。

相關推薦

activity之間傳遞handler

如果把handler定義為static,它的子成員變數和子方法都要是static屬性。一旦activity接收到handler,要處理的事件變多,則大量的變數和函式都成為static型別了,這樣非常不利於程式碼的獨立性和隱私性。這是我在研究安卓系統藍芽通訊技

activity之間傳遞handler

最近在研究基於安卓系統的語音識別和藍芽通訊,過程中涉及到多個activity的互動。activity之間的互動資料可以由Intent完成,也可以借用Handler。如果用intent的話,一定要finish當前的activity UI,另一個activity響應

activity之間傳遞handler

續 “在activity之間傳遞handler(二)”~ 要解決的問題是: 在 activity A 裡面打開了另一個activity B,在activity B 不關閉的情況下,也就是介面layout不變,發訊息給前一個activity A, activi

Activity之間傳遞引數

-------siwuxie095 傳遞簡單資料 (1)首先建立一個專案:SendArgs (2)選擇API:21 Android 5.0 (3)選擇Empty Activity

android activity之間傳遞物件Serializable 和 Parcelable

Android中Intent中傳遞物件的方法, 一種是Bundle.putSerializable(Key,Object); 另一種是Bundle.putParcelable(Key, Object); 當然這些Object是有一定的條件的,前者是實現了Serializa

Android基礎 -- Activity之間傳遞資料bitmap和map物件

這邊文章很古老了,看到還有朋友回覆,這裡更新幾點,避免誤導大家。 第一,傳遞HashMap物件  HashMap本身已經實現了Cloneable, Serializable,Intent傳遞時,直接強轉就可以了。(感謝@qcks指正) Map<String, St

C# 16進制與字符串、字節數組之間的轉換

bool sub ber con tostring mat cep 字節數組 log 1 /// <summary> 2 /// 字符串轉16進制字節數組 3 /// </summary> 4 /// <param

Android9.0 Activity啟動流程分析

文章目錄 1、ActivityThread的main函式 2. AMS的attachApplication函式 2.1 Part-I 2.2 Part-II 2.2.1 ApplicationThread的bindApp

使用nanomsg庫實現多執行緒之間的通訊

概述:       這次是nanomsg庫實現的一個類似於MQTT通訊的一種方式,廣播訂閱的一個一對多的通訊方式。一個主的廣播訊息,其他可以訂閱自己想要的主題資訊,然後就會只接收訂閱的主題的資訊。 PubSub一對多主題訂閱通訊Demo #include <std

執行緒之間的通訊

執行緒之間通訊 概念: 執行緒是作業系統中獨立的個體,但這些個體如果不經過特殊的處理就不能成為一個整體,執行緒間的通訊就是成為整體的比用方式之一。當執行緒存在通訊指揮,系統間的互動性會更強,在提高CPU利用率的同時還會使開發人員對執行緒任務處理的過程中進行有效

面試必問系列 建構函式,原型物件,例項之間的關係例項屬性和原型屬性

在學習建構函式,原型物件,例項之間的關係時,有一個特別容易混亂的點就是例項屬性和原型屬性建立例項之後,我們可以為例項物件繼續新增屬性,如果我們新增的屬性和原型物件中的屬性重名,那麼呼叫的時候,就會先在例項中查詢是否有這個屬性,如果有就直接取例項中的屬性,如果沒有就去原型物件查

Weex事件傳遞機制

Weex事件傳遞機制 1.Weex元件事件繫結過程 Weex元件的事件繫結發生在WXComponent的方法applyLayoutAndEvent上: public void applyLayoutAndEvent(WXComponent co

影象型別、MATLAB資料型別,以及型別之間的轉換

上篇中我們根據需要將影象分為4種類型,其中每種影象的表示或多或少都牽扯到不同的資料型別,大致如下: 影象型別 使用到的資料型別 灰度影象 畫素值為uint8,uint16,歸一化double等型別 二值影象 畫素值為lo

同一瀏覽器多個標籤頁之間的通訊——cookie+setInterval

二、cookie  (1)cookie是什麼?  HTTP Cookie,通常直接叫做cookie,最初是在客戶端用於儲存回話資訊的。該標準要求伺服器對任意HTTP請求傳送Set-CookieHTTP頭作為相應的一部分,其中包含回話資訊。瀏覽器會儲存這樣的回話資訊,並在這之後

android之在activity中控制另一個activity的UI更新_如何在activity之間傳遞handler

遇到一個問題,需要在一個activity中控制另一個acitivity做一些更新,沒想到傳遞handler的方法,通過以下方式解決。1.在MyAPP中定義屬性handlerpackage jason.c

利用Digester實現xml和bean之間的轉換

Digester框架屬於Jakarta Commons,它以規則和模式為基礎處理XML文件。與SAX和DOM之類的標準API相比,Digester不涉及太多的細節問題,非常適合於對XML文件進行簡單的處理。 比如要解析如下的xml檔案 <pers

Vue 爬坑之路—— 組件之間的數據傳遞

組件 圖片 NPU tar bubuko 9.png com clas entry Vue 的組件作用域都是孤立的,不允許在子組件的模板內直接引用父組件的數據。必須使用特定的方法才能實現組件之間的數據傳遞。 首先用 vue-cli 創建一個項目,其中 App.vue 是父組

Spark ShuffleExecutor、Driver之間Shuffle結果消息傳遞、追蹤(轉載)

red free 只需要 sub rem 直接 nod 包含著 des 1. 前言 在博客裏介紹了ShuffleWrite關於shuffleMapTask如何運行,輸出Shuffle結果到Shuffle_shuffleId_mapId_0.data數據文件中,每個execu

Vue 爬坑之路—— 元件之間的資料傳遞

Vue 的元件作用域都是孤立的,不允許在子元件的模板內直接引用父元件的資料。必須使用特定的方法才能實現元件之間的資料傳遞。 首先用 vue-cli 建立一個專案,其中 App.vue 是父元件,components 資料夾下都是子元件。 一、父元件向子元件傳遞資料

Android Intent傳值兩個Activity之間傳遞資料

在兩個Activity之間傳遞資料,最終都是通過Intent傳遞,但設定資料和儲存資料方式有兩種(使用Intent 和 Bundle),分別對應如下: 設定資料(MainActivity.java) 方法一:1.直接用intent.putExtra(“name”,“張三”)