Android的AsyncTask问题

时间:2010-07-29 18:22:56

标签: android android-asynctask

任何人都可以提出以下建议: 我正在尝试从Android的帮助页面执行代码,但它对我不起作用:

public class DownloadFilesTask extends AsyncTask<String, Integer, Long> {
        protected Long doInBackground(String... urls) {
            Log.e("TuneWiki", "Exec");
            return 1l;
        }

        @Override
        protected void onPostExecute(Long result) {
            Log.e("TuneWiki", "Post");
        }
}

当我执行task时,doInBackground被调用很好,但是从不调用onPostExecute:(

使用2.1操作系统测试里程碑

2 个答案:

答案 0 :(得分:6)

谢谢大家 - 我找到了原因。如果即使所有线程都成功完成也会在很多线程启动之前,AsyncTask因某些原因停止工作。

答案 1 :(得分:1)

使用AsyncTasks进行文件下载并不是一个好主意(正如AsyncTask的名称所示)。 AsyncTasks不应用于网络等长时间运行的操作。实际上,AsyncTask有两个相关的主要问题:

  • 他们与活动生命周期联系不佳
  • 创建内存非常容易泄漏。

RoboSpice动机应用(available on Google Play)内,我们会详细回答这个问题。它将深入介绍AsyncTasks,Loaders及其功能和缺点,并向您介绍网络请求的替代解决方案:RoboSpice。

我们甚至提供了an infographics来解释这个问题。用几句话说出来

  • AsyncTasks存在缺陷,因为它们与活动生命周期联系不佳并造成内存泄漏
  • 加载器非常适合它们的设计目的:访问Sqlite数据库的游标,但不提供任何网络支持。他们是错误的工具。
  • RoboSpice在服务中执行网络请求,您的下载在Android服务中执行,内存管理得很好,甚至还支持编写REST请求。

我鼓励您下载RoboSpice Motivations app,它确实深入地解释了这一点,并提供了进行某些后台操作的不同方法的示例和演示。