在UI中,为了执行一些后台工作,我使用了一个单独的Thread.但正如其他人所说,我现在正在使用AsyncTask.
a Thread和an 之间的主要区别是AsyncTask什么?
在哪种情况下,我应该使用a Thread还是AsyncTask?
我有一个AsyncTask对象,它在创建活动时开始执行,并在后台执行操作(下载最多100个图像).一切都很好,但有一种我不能理解的特殊行为.
例如:当Android屏幕的方向发生变化时,活动将被销毁并再次创建.所以我重写onRetainNonConfigurationInstance()方法并保存在AsyncTask中执行的所有下载数据.我这样做的目的是每次在方向更改期间销毁活动时都不会运行AsyncTask,但正如我在日志中可以看到的,之前的AsyncTask仍然在执行.(虽然数据保存正确)
我甚至尝试在活动的onDestroy()方法中取消AsyncTask,但日志仍然显示AsyncTask正在运行.
这是非常奇怪的行为,如果有人能告诉我停止/取消AsyncTask的正确程序,真的很感激.
谢谢
我正在通过各种实践来处理线程和AsyncTask的方向更改.我遇到了以下解决方案:
有没有其他方法来处理这种情况?建议的做法是什么?我问这个是因为我在Android文档的任何地方都找不到通用的解决方案.
我有N个文件要下载.我想在后台连续下载它们 - 一个接一个.我想在ListView中显示进度和状态.所以,ListView看起来像:
File1 ...已下载
文件2 ....下载
File3 ...正在进行中说39%
File4 ......待定
....
Listview定期刷新(比如每2秒),文件很大:50 MB左右.所以他们需要1分钟以上才能下载.
我将文件URL列表传递给AsyncTask并将其下载到后台.问题是如何将进度反馈回ListView.
考虑用户可能会离开ListView页面离开AsyncTask只能返回以查看下载状态.
那么ListView如何"观察"AsyncTask的进度并显示它呢?
我正在考虑添加一组静态变量AsyncTask(使用"Synchronized"块保护它们)并在Fragment中使用显示ListView的定期UI更新程序.所以片段会有这样的东西:
是否有设计模式,公共项目或示例代码?
对不起,我不是一张好照片.我所描述的最接近的是这里(类似但我计划使用AsyncTask和串行下载):

android listview android-listview android-asynctask android-fragments
AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架.理想情况下,AsyncTasks应该用于短操作(最多几秒钟).
这就是它在文档中所说的内容.
说网络语言,"几秒钟"多长时间?
我的应用程序将执行以下操作,从数据库中获取数组列表,将其发送到服务器,获取另一个列表(json),发送一个好的,它收到列表,解析jsons,在db中插入列表,执行其他一些进程db,更新UI ..(该列表可以达到5000-1000个对象实例条目.)
使用asynctask这样的东西是个好主意吗?我还需要根据服务器响应的结果更新gui.
如果不是,我还有其他选择吗?
API参考说明,
理想情况下,AsyncTasks应该用于短操作(最多几秒钟).
是否有一个doInBackground的问题,比如,线程池可能耗尽线程30秒?如果这就是原因,如果我确保我的应用程序永远不会有多个如此长时间运行的doInBackground同时执行,它会不会成为一个问题?