在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 Shuffle(二)Executor、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”,“張三”)