在我现在写的这个App里边会有类似于那些新闻类的消息,就是有个list,里边每个item包含文字图片这些内容,我现在使用的是AsyncTask来进行网络请求的。
看到网上有些人说在android中使用AsyncTask很容易造成内存泄露,请问前辈们有什么方法可以避免AsyncTask的内存泄露,或者用其他什么方法进行网络请求。
在我现在写的这个App里边会有类似于那些新闻类的消息,就是有个list,里边每个item包含文字图片这些内容,我现在使用的是AsyncTask来进行网络请求的。
看到网上有些人说在android中使用AsyncTask很容易造成内存泄露,请问前辈们有什么方法可以避免AsyncTask的内存泄露,或者用其他什么方法进行网络请求。
不建议使用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上也有托管,具体教程自行搜索
1 回答899 阅读✓ 已解决
1 回答1.6k 阅读
1 回答824 阅读
1 回答795 阅读
1 回答784 阅读
1 回答757 阅读
888 阅读
网络请求使用
android-async-http
方便简单