1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| static abstract class WeakAsyncTask<Param, Progress, Result, WeakTarget> extends AsyncTask<Param, Progress, Result> {
protected WeakReference<WeakTarget> mTarget;
public WeakAsyncTaskB(WeakTarget weakTarget) { mTarget = new WeakReference<>(weakTarget); }
@Override protected void onPreExecute() { super.onPreExecute(); onPreExecute(mTarget); }
@Override protected void onPostExecute(Result result) { super.onPostExecute(result); onPostExecute(mTarget, result); }
@Override protected void onProgressUpdate(Progress... values) { super.onProgressUpdate(values); onProgressUpdate(mTarget, values); }
@Override protected Result doInBackground(Param... params) { Log.d(TAG, "doInBackground: " + params.getClass()); return doInBackground(mTarget, params); }
@Override protected void onCancelled(Result result) { super.onCancelled(result); onCancelled(mTarget, result); }
protected abstract void onPreExecute(WeakReference<WeakTarget> weaktarget);
protected abstract Result doInBackground(WeakReference<WeakTarget> weaktarget, Param... params);
protected abstract void onProgressUpdate(WeakReference<WeakTarget> weaktarget, Progress... values);
protected abstract void onPostExecute(WeakReference<WeakTarget> weaktarget, Result result);
protected abstract void onCancelled(WeakReference<WeakTarget> weaktarget, Result result); } static class MyAsyncTask extends WeakAsyncTask<Void, Integer, String, AsyncTaskActivity> { public MyAsyncTask(AsyncTaskActivity asyncTaskActivity) { super(asyncTaskActivity); }
@Override protected void onPreExecute(WeakReference<AsyncTaskActivity> weaktarget) { }
@Override protected String doInBackground(WeakReference<AsyncTaskActivity> weaktarget, Void... voids) { try { int i = 0; while (true) { if (Thread.currentThread().isInterrupted()) break; Thread.currentThread().sleep(1000); publishProgress(++i); } } catch (Exception e) { return "异常"; } return "被终止了"; }
@Override protected void onProgressUpdate(WeakReference<AsyncTaskActivity> weaktarget, Integer... values) { AsyncTaskActivity activity = weaktarget.get(); if (activity != null) activity.mTextView.setText("post:" + values[0]); }
@Override protected void onPostExecute(WeakReference<AsyncTaskActivity> weaktarget, String s) { AsyncTaskActivity activity = weaktarget.get(); if (activity != null) activity.mTextView.setText("post:" + s); }
@Override protected void onCancelled(WeakReference<AsyncTaskActivity> weaktarget, String s) { AsyncTaskActivity activity = weaktarget.get(); if (activity != null) activity.mTextView.setText("cancel:" + s); } }
|