Android 开发中使用AsyncTask
天蓬老师
天蓬老师 2017-04-17 12:04:54
[Android讨论组]

在我现在写的这个App里边会有类似于那些新闻类的消息,就是有个list,里边每个item包含文字图片这些内容,我现在使用的是AsyncTask来进行网络请求的。
看到网上有些人说在android中使用AsyncTask很容易造成内存泄露,请问前辈们有什么方法可以避免AsyncTask的内存泄露,或者用其他什么方法进行网络请求。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网

网络请求使用 android-async-http
方便简单

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {

@Override
public void onStart() {
    // called before request is started
}

@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
    // called when response HTTP status is "200 OK"
}

@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
    // called when response HTTP status is "4XX" (eg. 401, 403, 404)
}

@Override
public void onRetry(int retryNo) {
    // called when request is retried
}
});
阿神

不建议使用AsyncTask进行网络操作,Android文档中有写到AsyncTask应该处理10秒一下的操作(通常为轻量的本地IO操作),由于网络操作存在不确定的超时,所以可能操作会在10秒以上,不建议使用。

关于AsyncTask内存泄露的,以及并行串行问题。可以访问这篇文章了解。译文:Android中糟糕的AsyncTask

将AsyncTask或者Thread的子类作为单独的文件,不持有Activity的强引用
将AsyncTask或者Thread的子类使用static修饰,则不会隐式持有Activity的强引用
如果是匿名内部类,则需要将其对象设置成成员属性,使用static修饰就不会隐式持有Activity的强引用。

如果是进行网络操作,可以使用将AsyncTask对象做成静态的成员变量。使用这个Executors.newSingleThreadExecutor()或者Loaders。

巴扎黑

我觉得一般是使用2013年Google I/O大会上推出的Volley框架,对网络请求都做了封装,特别适合这种常见新闻列表类项目,具体请参考https://android.googlesource.com/platform/frameworks/volley
Github上也有托管,具体教程自行搜索

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号