Android 回調函數的理解,實用簡單(回調函數其實是為傳遞數據)


作者: 夏至,歡飲轉載,也請保留這段申明
http://blog.csdn.net/u011418943/article/details/60139910

一般我們在不同的應用傳遞數據,比較方便的是用廣播和回調函數,當然還有其他方式,這里學學回調函數的使用;
什么是回調函數呢?在C/C++中,因為我們有指針這個東西,所以傳遞數據什么的,挺方便,把那個指針地址發過來,改一下地址里面的值即可即可;但是Java中是沒有指針這個概念的,所以,這個回調函數則是用一個interface 接口和內部類實現的。
而實用回調函數的好處在於,可以很方便的監聽到某個類的狀態,常用的是監聽一個下載任務的進度和下載狀態等等。
首先,先定義一個共有接口:

public interface myCallBack {
public void fail(int error,String msg);
}
ok,我們定義了一個接口,那怎么使用呢?首先先思考一下,假如我有兩個類,b和c,我想在b類中監聽c類的fail這種狀態;那我只要把b類的實例給c,c實現方法就可以了。
ok,那么我們在c類中,實現方法

public class myc {

public void test(int error,myCallBack mycallback){
if (error ==1 ){
mycallback.fail(1,"測試得到: "+1);
}else{
mycallback.fail(0,"沒有得到1");
}
}
}
然后,我們在b類中,實例化c類,然后我們的 myCallBack 實例傳遞過去

new myc().test(1, new myCallBack() {
@Override
public void fail(int error, String msg) {
Log.d(TAG, "fail: "+msg);
}
});
打印如下:

zsr: fail: 測試得到: 1
1
2
在服務中心回到結果:
有時候,我們需要這種需求,比如一個下載任務,我們在服務中開啟了下載任務,我們需要在 MainActivity 去監聽下載任務的進度和下載狀態等一些信息,但是我們啟動這個callback是在服務的,那怎么辦?
很簡單,只要把 MainAcivity 的callback 實例給服務就可以了,但是不是用 inputextra 的方式:

public class myb extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
private myCallBack myCallBack = MainActivity.myCallBack;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

new myc().test(0,myCallBack ); //把開啟這個服務的 callback 實例傳遞過來
return super.onStartCommand(intent, flags, startId);
}
}
這樣,我們就可以在 MainActivity 中監聽c類中的狀態了:

public static myCallBack myCallBack = new myCallBack(){
@Override
public void fail(int error, String msg) {
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
};
---------------------
作者:夏至的稻穗
來源:CSDN
原文:https://blog.csdn.net/u011418943/article/details/60139910
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM