1. 程式人生 > >Android之在一個類裡面註冊Handler傳送訊息在另外一個類裡面接收訊息

Android之在一個類裡面註冊Handler傳送訊息在另外一個類裡面接收訊息

1、問題

我們要在一個類裡面變數或者函式變化需要改變另外一個類裡面的東西,這個時候java裡面除了介面回撥之外,我們還可以用註冊Handler來實現

2、程式碼實現

1、MainActivity.java檔案

package com.example.handlercallback;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
	
	public Control mControl;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mControl = new Control();
		new Thread(new Runnable(){
			@Override
			public void run() {
				Manager.getInstance().sendSuccessMessage();
				try {
					Thread.sleep(2000);
					Manager.getInstance().sendFailMessage();
				} catch (InterruptedException e) {
				}
			}
		}).start();
	}

}


2、Control.java檔案

package com.example.handlercallback;


import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class Control {
	
	public static final String TAG  = "Control";
	public static final int OK = 0;
	public static final int fail = -1;

	private Handler svpnSericeHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case Control.OK:
				Log.d(TAG, "msg.what = " + msg.what);
				return;
			case Control.fail:
				Log.d(TAG, "msg.what = " + msg.what);
				return;
			default:
				Log.d(TAG, "msg.what = " + msg.what);
				break;
			}
		}
	};
	
	public Control() {
		Manager.getInstance().setHandler(svpnSericeHandler);
	}
	
}


3、Manager.java檔案

package com.example.handlercallback;

import android.os.Handler;

public class Manager {
	
	public static final String TAG = "Manager";
	
	private static Manager mInstance;
	
	public Handler mHandler;
	
	public synchronized static Manager getInstance() {
		if (mInstance == null) {
			mInstance = new Manager();
		}
		return mInstance;
	}
	
	public void setHandler(Handler handler) {
		this.mHandler = handler;
	}
	
	public void sendSuccessMessage() {
		mHandler.sendEmptyMessage(Control.OK);
	}
	
	public void sendFailMessage() {
		mHandler.sendEmptyMessage(Control.fail);
	}
}


3、結果展示

                Control  D  msg.what = 0
               Timeline  I  Timeline: Activity_idle id: [email protected] time:79529768
                Control  D  msg.what = -1


日誌打印出來了

相關推薦

Android之在一個裡面註冊Handler傳送訊息另外一個裡面接收訊息

1、問題 我們要在一個類裡面變數或者函式變化需要改變另外一個類裡面的東西,這個時候java裡面除了介面回撥之外,我們還可以用註冊Handler來實現 2、程式碼實現 1、MainActivity

Python3基礎 把的實例化放到另外一個

intro 知識 res 轉變 load pycharm pyc nload charm ? python : 3.7.0 OS : Ubuntu 18.04.1 LTS

Qt如何將訊息在2沒有關係的中從一個傳送到另一個

條件: ①2個類直接沒有任何關係; ②接收訊息的類必須有一個全域性變數; ③ QMetaObject::invokeMethod((QObject*)全域性變數類, "接收的方法", Qt::AutoConnection, Q_ARG(接收的引數型別, 接收的引數)); cla

在visual studio 2017下用xamarin for android簡單的註冊頁面,包含單選控制元件,多選控制元件和下拉選單控制元件

照著牛腩老師的視訊,自己做了個註冊頁面,實現了簡單的單選控制元件、多選控制元件、下拉選單控制元件的使用,由於日曆控制元件太醜,就不模仿了,下面就是reg.axml的佈局效果,後面是程式碼。 , <?xml version="1.0" encoding="utf-8"?

Android 之一很好的Viewpager滑動指示器

public class ViewPagerIndicator extends LinearLayout{/*** 繪製三角形的畫筆*/private Paint mPaint;/*** path構成一個三角形*/private Path mPath;/*** 三角形的寬度*/private int mTri

Python + Appium 【已解決】driver(session)在多class之間復用,執行完一個的用例,再次執行下的用例時不需要初始化

nic bject config com appium client lee session ted py文件的名稱為:appium_config.py 中的寫法如下 # coding=UTF-8 ‘‘‘ Created on 2017.1.13 @author: Lu

C++中一個訪問另外一個的成員變數或者成員函式

1.在一個類中定義另外一個類的成員為指標型別。並用this指標管理物件的記憶體,實現資料的傳遞。 #include <stdio.h> class A { public: A(); ~A(); void SetData(int year, int month, int day);

嵌入式Linux併發程式設計,程序間通訊方式,System V IPC,訊息佇列,開啟/建立msgget(), 傳送訊息msgsnd(),格式,接收訊息msgrcv(),控制訊息佇列 msgctl()

文章目錄 1,訊息佇列 2,訊息佇列結構 3,訊息佇列使用步驟 3.1,開啟/建立訊息佇列 msgget() 3.1.1,開啟/建立訊息佇列---示例msgget() 3.2,向訊息佇列傳送訊息 msgs

【Linux】將一個命令的輸出傳送另外一個命令

一個命令的輸出可以作為下一個命令的輸入,下一個命令的輸出又會傳遞給下一個命令 我們通常使用管道和子shell的方法來組合多個命令的輸出 格式 $ cmd1 |cmd2 | cmd3 這裡的3個組合命令,cmd1的輸出傳遞給cmd2,cmd2的輸出傳遞給cmd3,最終出現在顯示器或者檔案中 示例 1.組合命令

python - 一個物件的屬性可以是另外一個建立的物件

示例:士兵射擊 需求: 1.士兵瑞恩有一把AK47 2.士兵可以開火(士兵開火扣動的是扳機) 3.槍 能夠 發射子彈(把子彈發射出去) 4.槍 能夠 裝填子彈 --增加子彈的數量 分析: 類: Soldier Gun -------

一個的成員函式宣告為另一個的友元函式

友元提供了不同類的成員函式之間、類的成員函式與一般函式之間進行資料共享的機制。通過友元,一個不同函式或另一個類中的成員函式可以訪問類中的私有成員和保護成員。c++中的友元為封裝隱藏這堵不透明的牆開了一個小孔,外界可以通過這個小孔窺視內部的祕密。 友元的正確使用能提高程式的執

SQL語句 怎麼把一個表的資料複製到另外一個裡面

如何把一個表中的資料複製到另一個表中 1,複製表結構及資料到新表 select * into 目標表名 from 源表名(要求目標表不存在,因為在插入時會自動建立) 2,只複製表結構到新表 CREATE TABLE 新表 SELECT * FROM 舊錶 WHERE 1=2 即:讓

C#反射呼叫另外一個中的私有欄位和方法

        /// <summary>        /// 設計器支援所需的方法 - 不要        /// 使用程式碼編輯器修改此方法的內容。        /// </summary>        private void InitializeComponent()  

java 物件轉換成另外一個物件 泛型

物件轉換成另一個類物件 package com.mw.usims.fts.util; import com.mw.usims.fts.model.BaseModel; import org.apache.poi.ss.formula.functions.T; impor

Java File學習筆記4:自定義一個,過濾指定副檔名的檔案

一、FilenameFilter介紹 java.io.File類提供了四個方法用於列舉某個路徑下的檔案和目錄,但不會遞迴列舉子目錄下的內容 其中兩個是列舉路徑下的所有檔案和目錄。 (1)String

Android進階封裝之一實現相容Android 6.0許可權、適配Android7.0 拍照!

Android進階封裝之“史無前例”一個類實現相容Android 6.0許可權、適配Android 拍照7.0: 相機與相簿上傳圖片就用我好啦! 一、前言。 本篇部落格從基本的AndroidN開始說怎麼適配其拍照,其與7.0以下有何區別

Oracle官方併發教程之一同步的例子

原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 是表示顏色的類,每一個物件代表一種顏色,使用三個整形數表示顏色的三基色,字串表示顏色名稱。 public class SynchronizedRGB { // Values must be between 0 and

Android設計模式之一例子讓你徹底明白工廠模式(Factory Pattern)

提出疑問 這幾天研究工廠模式的時候,看到網上的一些文章中舉的例子我就很疑惑,我相信這也是許多人的疑惑:工廠模式的功能就是建立例項,我們建立例項直接new不就完了嗎,幹嘛還得再封裝一層工廠類,然後用工廠類再去new出這個例項?這不多此一舉嗎? 比如我看到這樣的

Android設計模式之一例子讓你徹底明白裝飾者模式(Decorator Pattern)

導讀 這篇文章中我不會使用概念性文字來說明裝飾者模式,因為通常概念性的問題都很抽象,很難懂,使得讀者很難明白到底為什麼要使用這種設計模式,我們設計模式的誕生,肯定是前輩們在設計程式的時候遇到了某種困難,為了避免這種苦難的發生,從而設計出來的這種設計模式,所以這

Android Handler 傳送訊息的執行緒安全問題

Handler在多執行緒傳送訊息到訊息佇列時是否會產生執行緒安全問題。 下面對傳送流程進行分析 public final boolean sendEmptyMessage(int what) { return sendEmptyMessageDel