溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

安卓應(yīng)用-自定義監(jiān)聽器1

發(fā)布時間:2020-06-11 22:09:48 來源:網(wǎng)絡(luò) 閱讀:1413 作者:sy月牙兒 欄目:開發(fā)技術(shù)

    這幾天做個連連看游戲,是學(xué)校要求的“練手”產(chǎn)品,培訓(xùn)機構(gòu)有給相關(guān)的資料,但是實在不合我的胃口,為了節(jié)省時間就下了個源碼研究,然后自己去寫寫看。

    今天要說的就是,自定義監(jiān)聽器。

    開始的時候,完全搞不明白這到底是個神馬東東,很神秘的感覺,做起來也好麻煩,然后就開始各種找資料看。

    最開始就是做完出效果,但是還是不太好理解,多做幾個例子跟著程序走一遍就明白了。


    下面是我對監(jiān)聽器的理解:可以這么看,監(jiān)聽嘛,就是監(jiān)視并報告,假設(shè)現(xiàn)在是兩軍對戰(zhàn),我軍需要監(jiān)視敵軍的情況,那么就要在敵軍中安插一個線人(奸細),然后告訴他有什么情況隨時匯報,我方接到線人的回報后,再做出相應(yīng)的對策。


    現(xiàn)在,做一個簡單的小程序如下。定義一個包含計時器的類(敵),安插線人后計時10s,然后報告給我方,我方接到線人的報告后,退出程序。


1、新建一個安卓應(yīng)用程序,全部默認就好

2、定義一個接口,叫Spy,這就是間諜。間諜就干一件事,Listening()。

package com.test.leetlelistener1;

public interface Spy {
	
	public void Listening();

}

3、定義地方陣營Enemy,并寫一個計時器,一個setSpy(Spy s)方法,用來安插線人。

package com.test.leetlelistener1;

/**
 * 定義被監(jiān)聽的陣營
 * @author LEE
 *
 */
public class Enemy {

	public Spy spy;
	public int time = 10;
	Timer timer=new Timer();

	public void setSpy(Spy s) {
		this.spy = s;
		timer.start();
	}
	

	/**
	 * 定義計時器
	 * @author LEE
	 *
	 */
	class Timer extends Thread {
		@Override
		public void run() {
			super.run();
			while (time >= 0) {
				time--;
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			spy.Listening();
		}
	}

}

4、讓MainActivity implements線人接口。然后定義一個Enemy,并安插線人

package com.test.leetlelistener1;

import com.test.leetlelistener1.R;

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

public class MainActivity extends Activity implements Spy {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Enemy enemy = new Enemy();
		enemy.setSpy(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void Listening() {
		System.out.println("MainActivity Listening()");
		System.exit(0);
	}

}


5、運行。10s后程序退出。

    這是最簡單的自定義監(jiān)聽的例子,也比較容易理解,MainActivity自己當了間諜,安插到敵方,然后在10s后通知大本營退出程序就over了。

    我覺得這個比較神奇的就是,setSpy(MainActivity.this),這個設(shè)置的線人不是別的,正是implements了Spy的MainActivity自己,而setSpy(Spy s)的形參就是(Spy spy)。

    以前學(xué)基礎(chǔ)知識的時候,會有接觸過接口繼承的東西,但是沒這樣子應(yīng)用過,實踐和理論還是蠻不一樣的哈。

    關(guān)于Listening()方法,也可以為其設(shè)置參數(shù),比如改成

public void Listening(int time)

    可以通過參數(shù)傳遞向大本營提供詳細的情報信息。

    當然也可以設(shè)置很多個監(jiān)聽方法,用來表示不同的監(jiān)聽事件。



    另外不知道這個是不是觀察者模式的一種應(yīng)用呢?回去補一下設(shè)計模式。


    自定義監(jiān)聽器1到此結(jié)束!附上源碼。


2014.12.28


附件:http://down.51cto.com/data/2365243
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI