編輯:關於Android編程
android事件處理:
基於監聽,基於回調。
基於監聽,是為android界面組件綁定特定的事件監聽器。主要處理一些特定的事件。
基於回調,時重寫android組件特定的回調方法,或者重寫activity的回調方法。android為絕大部分界面組件都提供了事件響應的回調方法。可以用於處理一些具有通用性的事件。
對於基於監聽的事件處理模型來說,事件源和事件監聽器是分離的,當事件源上發生特定事件之後,該事件交給事件監聽器負責處理,對於基於回調的事件處理模型來說,事件源和事件監聽器時統一的,當時間源發生特定事件之後,該事件還是有事件源本身負責處理。
例如:boolean onKeyMultiple(int keyCode,int repeateCount,KeyEvent event)用於響應按鍵重復點擊。官方API支出,它總是返回false,沒有handle,必須重寫才能實現。
委托機制需要事件源,事件和監聽。而回調機制難以理解,網上通俗的說法是:A類持有B類引用,A調用B的方法C,然後B類中反過來調用A類中的方法D,D就叫回調方法。其實D正是回調接口中的方法。
根據這種思路的理解,我寫了個簡單的示例,方便自己了解。
A有一個策劃方案,需要B去完成。B還有其他工作要做,只有做完了才能去做這個策劃方案。B完成策劃方案後,調用A的方法,把方案交給A。
A類:需要實現回調接口,並調用B的一個方法
public class A implements CallBack{
/**
* A類持有B類的一個引用
*/
private B b;
public A(B b){
this.b=b;
}
/**
* 執行異步任務的方法
* @param ask
*/
public void ask(final String ask){
//模擬異步任務,同時進行兩項任務
new Thread(new Runnable() {
@Override
public void run() {
//1 調用B類方法,完成獲取方案
b.excuteMessage(A.this, ask);
//2 執行其他任務
task();
}
}).start();
}
/**
* 其他任務
*/
public void task(){
System.out.println("---------");
}
/**
* 得到解決方案
* 回調方法
*/
@Override
public void sovle(String result) {
System.out.println(result);
}
}
B類:被調用的方法需要帶有一個回調接口的參數,並調用A類的一個方法(回調方法)
public class B {
/**
* 接口做參數的方法
* @param cb 回調接口
* @param ask 問題
*/
public void excuteMessage(CallBack cb,String ask){
System.out.println("問題是:"+ask);
//經過一段時間,方案已產生
String result = "方案1";
//B類中反過來調用A類中的方法
cb.sovle(result);
}
}
/**
* 回調接口
* @author DB
*
*/
public interface CallBack {
/**
* 回調方法
* @param result
*/
public void sovle(String result);
}
public class Test {
public static void main(String[] args) {
B b = new B();//B類注冊回調方法
A a = new A(b);//A類實現回調接口
//A類引用調用自身方法
a.ask("ask");
}
}
Android 暫停和恢復Activity
暫停和恢復Activity(Pausing and Resuming an Activity)一個Activity是一個應用程序組件,提供一個屏幕,用戶可以用來交互為了完
Android 內存洩露簡介、典型情景及檢測解決
什麼是內存洩露?Android虛擬機的垃圾回收采用的是根搜索算法。GC會從根節點(GC Roots)開始對heap進行遍歷。到最後,部分沒有直接或者間接引用到GC Roo
Android學習路線(二十四)ActionBar Fragment運用最佳實踐
通過前面的幾篇博客,大家看到了Google是如何解釋action bar和fragment以及推薦的用法。俗話說沒有demo的博客不是好博客,下面我會介紹一
Android開發仿掃一掃實現拍攝框內的照片功能
就是仿照現在掃一掃的形式,周圍是半透明的遮擋,然後中間是全透明的,拍攝後只截取框內的內容查了很多博客,實現起來真的太復雜了,本人比較怕麻煩所以在很多地方偷懶了先上效果圖: