版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyh1234/article/details/45311871
package com.suniot.caigou.task;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
import com.lyh.lib.utils.DebugLog;
import com.lyh.lib.utils.CommonUtils;
import com.suniot.caigou.widgets.CustomProgressDialog;
public class EMobileTask {
public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback) {
EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, null, false);
}
public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback) {
EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, null, false, false);
}
public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final boolean pCancelable) {
EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, null, pCancelable);
}
public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final boolean pCancelable) {
EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, null, pCancelable, true);
}
public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, pExceptionCallback, false);
}
public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, pExceptionCallback, false, false);
}
public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback, final boolean pCancelable) {
EMobileTask.doAsync(pContext, pContext.getString(pTitleResID), pContext.getString(pMessageResID), pCallable, pCallback, pExceptionCallback, pCancelable, true);
}
public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback, final boolean pCancelable, final boolean showDialog) {
new AsyncTask<Void, Void, T>() {
private CustomProgressDialog mDialog = null;
private Exception mException = null;
@Override
public void onPreExecute() {
if (showDialog) {
try {
mDialog = CustomProgressDialog.createDialog(pContext);
mDialog.setMessage(pMessage);
mDialog.setCanceledOnTouchOutside(false);
mDialog.show();
} catch (Exception e) {
DebugLog.e(e.toString());
}
}
if (pCancelable) {
mDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface pDialogInterface) {
pExceptionCallback.onCallback(new CancelledException());
pDialogInterface.dismiss();
}
});
}
super.onPreExecute();
}
@Override
public T doInBackground(final Void... params) {
try {
return pCallable.call();
} catch (Exception e) {
DebugLog.e(e.toString());
mException = e;
}
return null;
}
@Override
public void onPostExecute(final T result) {
try {
if (mDialog != null)
mDialog.dismiss();
} catch (Exception e) {
DebugLog.e(e.toString());
}
if (isCancelled()) {
mException = new CancelledException();
}
if (mException == null) {
try {
pCallback.onCallback(result);
} catch (Exception e) {
DebugLog.e(e.toString());
mException = e;
}
}
if (pExceptionCallback != null && mException != null) {
pExceptionCallback.onCallback(mException);
}
super.onPostExecute(result);
}
}.executeOnExecutor(Executors.newCachedThreadPool());
}
public static <T> void doProgressAsync(final Context pContext, final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback) {
EMobileTask.doProgressAsync(pContext, pTitleResID, pCallable, pCallback, null);
}
public static <T> void doProgressAsync(final Context pContext, final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
new AsyncTask<Void, Integer, T>() {
private ProgressDialog mPD;
private Exception mException = null;
@Override
public void onPreExecute() {
this.mPD = new ProgressDialog(pContext);
this.mPD.setTitle(pTitleResID);
this.mPD.setIcon(android.R.drawable.ic_menu_save);
this.mPD.setIndeterminate(false);
this.mPD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
this.mPD.show();
super.onPreExecute();
}
@Override
public T doInBackground(final Void... params) {
try {
return pCallable.call(new IProgressListener() {
@Override
public void onProgressChanged(final int pProgress) {
onProgressUpdate(pProgress);
}
});
} catch (final Exception e) {
this.mException = e;
}
return null;
}
@Override
public void onProgressUpdate(final Integer... values) {
this.mPD.setProgress(values[0]);
}
@Override
public void onPostExecute(final T result) {
try {
this.mPD.dismiss();
} catch (final Exception e) {
CommonUtils.log(String.format("%s->onPostExecute3->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), e.getLocalizedMessage());
}
if (this.isCancelled()) {
this.mException = new CancelledException();
}
if (this.mException == null) {
pCallback.onCallback(result);
} else {
if (pExceptionCallback == null) {
CommonUtils.log(String.format("%s->onPostExecute4->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), this.mException.getLocalizedMessage());
} else {
pExceptionCallback.onCallback(this.mException);
}
}
super.onPostExecute(result);
}
}.executeOnExecutor(Executors.newCachedThreadPool());
}
public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final AsyncCallable<T> pAsyncCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
final ProgressDialog pd = ProgressDialog.show(pContext, pContext.getString(pTitleResID), pContext.getString(pMessageResID));
pAsyncCallable.call(new Callback<T>() {
@Override
public void onCallback(final T result) {
try {
pd.dismiss();
} catch (final Exception e) {
CommonUtils.log(String.format("%s->onCallback->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), e.getLocalizedMessage());
}
pCallback.onCallback(result);
}
}, pExceptionCallback);
}
public static class CancelledException extends Exception {
private static final long serialVersionUID = -78123211381435595L;
}
}
package com.suniot.caigou.task;
public interface AsyncCallable<T> {
public void call(final Callback<T> pCallback, final Callback<Exception> pExceptionCallback);
}
package com.suniot.caigou.task;
public interface Callback<T> {
/**
* 当加载完成后回调,加载完毕的事后处理
*/
public void onCallback(final T pCallbackValue);
}
package com.suniot.caigou.task;
public interface IProgressListener {
public void onProgressChanged(final int pProgress);
}
package com.suniot.caigou.task;
public interface ProgressCallable<T> {
public T call(final IProgressListener pProgressListener) throws Exception;
}