用途:项目开发中用于请求数据
package com.bjtxwy.efun.base;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import com.alibaba.fastjson.JSON;
import com.bjtxwy.efun.activity.login.LoginActivity;
import com.bjtxwy.efun.bean.JsonResult;
import com.bjtxwy.efun.config.GlobalVariables;
import com.bjtxwy.efun.utils.HttpUtils;
import com.bjtxwy.efun.utils.StringUtils;
import java.lang.ref.WeakReference;
import java.util.Map;
/**
* 重构AsyncTask抽象类,实现弱引用。解决AsyncTask和Activity生命周期不一导致内存泄露的问题
* <p/>
* Created by Charming on 15/12/16.
* WeakTarget:activity对象
*/
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}
*/
@Override
protected final void onPreExecute() {
//当对象不为空的时候调用方法
final WeakTarget target = mTarget.get();
if (target != null) {
this.onPreExecute(target);
}
}
/**
* {@inheritDoc}
*/
@Override
protected final Result doInBackground(Params... params) {
//当对象不为空的时候调用方法
final WeakTarget target = mTarget.get();
if (target != null) {
return this.doInBackground(target, params);
} else {
return null;
}
}
/**
* {@inheritDoc}
*/
@Override
protected final void onPostExecute(Result result) {
//当对象不为空的时候调用方法
final WeakTarget target = mTarget.get();
if (target != null) {
this.onPostExecute(target, result);
if (result instanceof String && target instanceof Activity) {
//当返回结果为空
if (StringUtils.isEmpty((String) result)) {
return;
}
try {
JsonResult jsonResult = JSON.parseObject((String) result, JsonResult.class);
if (JsonResult.TOKEN_ILLEGAL.equals(jsonResult.getStatus()) || JsonResult.TOKEN_TIMEOUT.equals(jsonResult.getStatus())) {
/**
* tonken失效或其他问题不能使用的时候跳转到登录页面
*/
((Activity) target).startActivityForResult(new Intent((Activity) target, LoginActivity.class), REQUEST_CODE_TOKEN_FAIL_GO_LOGIN);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
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
}
public static final int REQUEST_CODE_TOKEN_FAIL_GO_LOGIN = 405;
}