AsyncTask的深度优化(内存泄露)

来源:互联网 发布:aa录音软件下载 编辑:程序博客网 时间:2024/05/16 09:11

AsyncTask底层虽然是封装了线程和handler,但是不可避免的出现了内存泄露的问题。

直接上代码:

package com.bmsh.router.http;import java.lang.ref.WeakReference;import com.bmsh.router.inteface.RouterMsgCallback;import android.os.AsyncTask;public abstract class WeakAsyncTask<Params, Progress, Result, WeakTarget>extends AsyncTask<Params, Progress, Result> {protected WeakReference<WeakTarget> mTarget;public WeakAsyncTask(WeakTarget target) {mTarget = new WeakReference<WeakTarget>(target);}/** {@inheritDoc} */@Overrideprotected final void onPreExecute() {final WeakTarget target = mTarget.get();if (target != null) {this.onPreExecute(target);}}/** {@inheritDoc} */@Overrideprotected final Result doInBackground(Params... params) {final WeakTarget target = mTarget.get();if (target != null) {return this.doInBackground(target, params);} else {return null;}}/** {@inheritDoc} */@Overrideprotected final void onPostExecute(Result result) {final WeakTarget target = mTarget.get();if (target != null) {this.onPostExecute(target, result);}}protected void onPreExecute(WeakTarget target) {// No default action}protected abstract Result doInBackground(WeakTarget target,Params... params);protected void onPostExecute(WeakTarget target, Result result) {// No default action}}

自己写的task类来继承这个类即可

0 0