项目----1(在项目开发中AsyncTask与Activity生命周期不一导致内存泄露的问题)
来源:互联网 发布:unity3d 动态生成模型 编辑:程序博客网 时间:2024/05/15 10:18
用途:项目开发中用于请求数据
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;
}
0 0
- 项目----1(在项目开发中AsyncTask与Activity生命周期不一导致内存泄露的问题)
- android开发中,可能会导致内存泄露的问题
- 【转】android开发中,可能会导致内存泄露的问题
- android开发中,可能会导致内存泄露的问题
- android开发中,可能会导致内存泄露的问题
- Android开发,中可能会导致内存泄露的问题
- 项目开发中遇到的两个问题:数组访问越界和内存泄露
- 在开发大型项目的时候,如何进行内存泄露检测的? 内存泄露怎么处理?
- Toast导致Activity内存泄露的解决方法
- Android开发编码规范导致的内存泄露问题
- Android开发编码规范导致的内存泄露问题
- c++ 导致内存泄露的一些小问题与解决方法
- Android之AsyncTask的内存泄露问题
- JNI接口中jstring导致内存泄露问题的解决
- Android中Handler使用不当导致内存泄露的问题
- Android中AsyncTask的内存泄露
- Android 在 Eclipse 项目中使用 Leakcanary 内存泄露检测
- 在myeclipse中用maven进行项目的打包时出现内存泄露问题
- 打JAR包 路径不是根目录的问题
- 数据结构-2
- session共享
- 精确记算程序的运行时间或者某段代码的运行时间
- ARC中_autoreleasing
- 项目----1(在项目开发中AsyncTask与Activity生命周期不一导致内存泄露的问题)
- 如何实现一个malloc
- panel的content属性
- 【CSS3】结构性伪类选择器—not
- xcode 导入七牛 objc-sdk
- Caused by: java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hiberna
- 前端开发
- java中线程同步
- 系统架构,软件架构,解决方案以及企业架构关系