在一個(gè)類(lèi)里面數據的變化需要在另外一個(gè)類(lèi)里面動(dòng)態(tài)得到,比如在我的異步任務(wù)里面下載的數據,需要在UI界面的ProgressDialog里面動(dòng)態(tài)顯示,我們需要在異步任務(wù)里面寫(xiě)個(gè)接口,然后接口里面有一些函數,至于在ProgressDialog顯示的時(shí)候,我們只需要重寫(xiě)接口,然后傳遞到異步任務(wù)里面去就行,一般在傳遞到異步任務(wù)里面去我們可以通過(guò)構造方法傳遞或者,set一個(gè)接口進(jìn)去。
這里通過(guò)構造方法傳遞接口
public class DownloadApkTask extends AsyncTask<Void, Integer, File> {
public interface CallBack {
//開(kāi)始下載彈出進(jìn)度對話(huà)框
public void startDownload();
//更新進(jìn)度值
public void updateProgress(int progress);
//下載完成,消失對話(huà)框,并且安裝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();
}
//***
}
}
public class DownloadApkTask extends AsyncTask<Void, Integer, File> {
public interface CallBack {
//開(kāi)始下載彈出進(jìn)度對話(huà)框
public void startDownload();
//更新進(jìn)度值
public void updateProgress(int progress);
//下載完成,消失對話(huà)框,并且安裝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();
}
}
我們在接口里面寫(xiě)了一匿名對象DEFAULT,然后mCallback初始化的時(shí)候,賦值為DEFAULT,然后在構造方法里面傳遞了這個(gè)接口,這里就爽我們傳遞空接口進(jìn)去也沒(méi)事,而且后面的調用接口的方法startDownload()方法的時(shí)候不需要判斷if(mCallback != null),因為我們在構造方法里面已經(jīng)做了處理,如果傳遞為空接口到構造方法里面去,我們調用startDownload()方法的時(shí)候,就會(huì )在interface CallBack里面的DEFAULT對象里面的startDownload()方法,然后打印日志,如果傳遞不是空接口到購置函數里面,調用startDownload()方法的時(shí)候,會(huì )調用外部接口回調里面的重寫(xiě)的startDownload()方法。
聯(lián)系客服