java之寫接口回調(diào)編程經(jīng)驗改進
1、問題
在一個類里面數(shù)據(jù)的變化需要在另外一個類里面動態(tài)得到,比如在我的異步任務(wù)里面下載的數(shù)據(jù),需要在UI界面的ProgressDialog里面動態(tài)顯示,我們需要在異步任務(wù)里面寫個接口,然后接口里面有一些函數(shù),至于在ProgressDialog顯示的時候,我們只需要重寫接口,然后傳遞到異步任務(wù)里面去就行,一般在傳遞到異步任務(wù)里面去我們可以通過構(gòu)造方法傳遞或者,set一個接口進去。
2、一般實現(xiàn)辦法
這里通過構(gòu)造方法傳遞接口
public class DownloadApkTask extends AsyncTask<Void, Integer, File> {
public interface CallBack {
//開始下載彈出進度對話框
public void startDownload();
//更新進度值
public void updateProgress(int progress);
//下載完成,消失對話框,并且安裝apk,需要apk的路徑
public void finishDownload(String apkPath);
//下載失敗
public void downloadFail();
}
public CallBack mCallback;
public DownloadApkTask (CallBack callback) {
this.mCallback = callback;
}
@Override
protected File doInBackground(Void... params) {
//***
if (mCallback != null) {
mCallback.startDownload();
}
//***
}
}
3、改進
public class DownloadApkTask extends AsyncTask<Void, Integer, File> {
public interface CallBack {
//開始下載彈出進度對話框
public void startDownload();
//更新進度值
public void updateProgress(int progress);
//下載完成,消失對話框,并且安裝apk,需要apk的路徑
public void finishDownload(String apkPath);
//下載失敗
public void downloadFail();
CallBack DEFAULT = new CallBack(){
@Override
public void startDownload() {
Log.debug(TAG, "DownloadApkTask startDownload");
}
@Override
public void updateProgress(int progress) {
}
@Override
public void finishDownload(String apkPath) {
}
@Override
public void downloadFail() {
}};
}
public CallBack mCallback = CallBack.DEFAULT;
public DownloadApkTask (CallBack callback) {
if (callback == null)
this.mCallback = CallBack.DEFAULT;
else
this.mCallback = callback;
}
@Override
protected File doInBackground(Void... params) {
mCallback.startDownload();
}
}
我們在接口里面寫了一匿名對象DEFAULT,然后mCallback初始化的時候,賦值為DEFAULT,然后在構(gòu)造方法里面?zhèn)鬟f了這個接口,這里就爽我們傳遞空接口進去也沒事,而且后面的調(diào)用接口的方法startDownload()方法的時候不需要判斷if(mCallback != null),因為我們在構(gòu)造方法里面已經(jīng)做了處理,如果傳遞為空接口到構(gòu)造方法里面去,我們調(diào)用startDownload()方法的時候,就會在interface CallBack里面的DEFAULT對象里面的startDownload()方法,然后打印日志,如果傳遞不是空接口到購置函數(shù)里面,調(diào)用startDownload()方法的時候,會調(diào)用外部接口回調(diào)里面的重寫的startDownload()方法。
作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎(chǔ)入門進階人工智能(鏈接)