问题标签 [android-asynctask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7734 浏览

android - 在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生什么?

在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生什么?

它是否只是将 Activity 从 Activity Stack 中弹出,但等待销毁 Activity 对象直到 AsyncTask 完全完成(因为 AsyncTask 是我的 Activity 的内部类)?

此外,如果 AsyncTask 是一个公共的、非内部的类,它不包含对 Activity 实例的引用,它的行为是否会有所不同?

0 投票
9 回答
139560 浏览

android - 取消正在执行的 AsyncTask 的理想方法

我正在使用AsyncTask. Cancellable显示提取操作运行时间的进度条。

当用户取消(决定反对)操作时,我想取消/中止AsyncTask运行。处理这种情况的理想方法是什么?

0 投票
5 回答
28153 浏览

android - 是否可以在 Service 类中使用 AsyncTask?

一切都在标题中。

在官方文档中Note that services, like other application objects, run in the main thread of their hosting process,AsyncTask 仅在它在 UIThread 中执行时才有效。

那么可以在 Service 类中使用 AsyncTask 吗?

我正在尝试这样做,但我总是遇到同样的错误

...

我做错了什么还是这不可能?

这是我的服务类的代码

0 投票
2 回答
1521 浏览

android - 从不同的活动方法更新活动 UI?

我有一个标签小部件,其中一个标签是聊天类型的功能。我想定期更新聊天数据(取决于聊天选项卡是否处于活动状态)。

最好的方法似乎是在我的主 TabActivity 类中使​​用 AsyncTask,因为这样可以避免在 AsyncTask 运行时在后台销毁聊天活动的任何问题。我想确保 Activity 不会被销毁和重新创建,从而导致我的 AsyncTask 无法修改实际活动 Activity 的数据。

但是,既然我的 AsyncTask 位于 TabActivity 活动中,我就没有直接的方法来notifyDataSetChanged()从我的onPostExecute()方法中调用我的 Chat 的 ListAdapter。有没有办法从 TabHost/TabActivity 中获取对给定 Tab 的当前 Activity 的引用?

或者,或者,我可以假设我的聊天活动永远不会作为 TabActivity 活动的子活动被破坏(好吧,至少在 TabActivity 处于活动状态时永远不会被破坏),然后将 AsyncTask 放入聊天活动中?

0 投票
1 回答
2657 浏览

android - 相同的 Activity 调用了两次...多个 AsyncTasks 的问题?

我有一个 AsyncTask 的三个同时实例来下载三个文件。当两个特定的完成时,最后onPostExecute()我检查每个设置的标志,如果两者都为真,我会调用startActivity()下一个活动。

我目前看到该活动被调用了两次,或者类似于这种行为的东西。由于屏幕会“向左滑动”过渡到下一个活动,因此它有时会执行两次(当我回击时,它会返回到同一个活动)。很明显,应该只调用一次的活动的两个版本被放在活动堆栈上。

这可能是因为两个 onPostExecute() 同时执行并且都检查彼此在完全相同的时间设置的标志吗?这似乎极不可能,因为两个进程必须并行运行...

***** EDIT *** 从这个问题中删除了很多,因为我认为我错了。尽管如此,我发现这里的答案非常有用,因此我编辑了问题以反映有用的部分。

0 投票
6 回答
51187 浏览

android - 如何在 AsyncTask 中举杯,提示我使用 Looper

我有 AsyncTask 在后台完成的任务。在某些时候,我需要发出一个 Toast 来表示某事已完成。

我试过了,但我失败了,因为 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我怎样才能做到这一点?

0 投票
1 回答
2984 浏览

android - 在不同线程上的 ListView 中加载图像的安全标准方法?

在提出这个问题之前,我已经搜索并阅读了这些问题: 在 ListView Android 中延迟加载图像 - 将图像延迟加载到 ListView 中的问题

我的问题是我有一个ListView,其中:

  • 每行包含一个ImageView,其内容将从互联网加载
  • 每一行的视图都像 ApiDemo 的 List14 一样被回收

我最终想要的:

  • 延迟加载图像,仅当用户滚动到它们时
  • 在不同的线程上加载图像以保持响应能力

我目前的做法:

  • 在适配器的getView()方法中,除了设置其他子视图之外,我还启动了一个从 Internet 加载位图的新线程。当该加载线程完成时,它会返回Bitmap要设置的ImageView(我使用AsyncTaskor来执行此操作Handler)。
  • 因为我recycle ImageViews,所以可能是我先想用 设置一个视图Bitmap#1,然后想Bitmap#2在用户向下滚动的时候设置它。Bitmap#1可能碰巧需要比Bitmap#2加载更长的时间,因此它最终可能会覆盖Bitmap#2视图。我通过维护一个WeakHashMap记住Bitmap我想为该视图设置的最后一个来解决这个问题。

下面是我当前方法的一些伪代码。我省略了缓存等其他细节,只是为了保持清楚。

我仍然遇到的问题:如果 Activity 在某些图像仍在加载时被破坏怎么办?

  • 当 Activity 已经销毁时,加载线程稍后回调 ImageView 是否有任何风险?
  • 此外,AsyncTask它下面有一些全局线程池,所以如果不再需要冗长的任务时没有取消它们,我最终可能会浪费时间加载用户
    看不到的东西。我目前在全球范围内保留这个东西的设计太丑陋了,最终可能会导致一些我无法理解的泄漏。ImageLoader我没有像这样制作 单例,而是考虑实际ImageLoader为 different 创建单独的对象Activities,然后当 an Activity被销毁时,它的所有 内容都AsyncTask将被取消。这也太尴尬了吧?

无论如何,我想知道在 Android 中是否有一种安全且标准的方法来执行此操作。另外,我不了解 iPhone,但那里有类似的问题吗?他们有标准的方法来完成这种任务吗?

非常感谢。

0 投票
2 回答
2524 浏览

android - 从另一个类/服务调用 AsyncTask 方法(回调?)

我想知道是否可以从另一个类和/或服务调用 AsynTask 类中定义的特定方法?在我的具体情况下,我有一个服务正在播放一些声音,但声音是从具有可用声音的列表中选择的......

选择声音时,它会从我的家庭服务器下载,这需要一些时间(不多,比如说大约 3-4 秒,声音/效果的大小并不大)......所以我现在的问题是我有一个播放这些声音的服务,当我选择一个时,我想显示一个进度对话框......方式(如果我理解正确的话)是使用 AsyncTask,但 AsyncTask 唯一会做的就是告诉我从我的服务器播放特定声音的服务......所以从服务到 Asynctask 没有“回调”......

我怎样才能做到这一点?如何调用位于另一个类中的正在运行的 AsyncTask,并告诉他所有工作都已完成,因此他可以停止显示 ProgressDialog ?还是我过度设计它并且还有其他方法?提前致谢...

0 投票
2 回答
1525 浏览

android - 使用异步任务测试 Android 活动

如何为启动异步任务的 Android 活动创建单元测试onCreate?我想测试这些任务的结果。

0 投票
2 回答
1341 浏览

android - 何时在 Android 中使用服务

我有一个类可以响应主要活动中的按钮按下来获取数据。不幸的是,我一直遇到问题,因为这个类不是活动或服务。例如,如果没有上下文,我无法将资源 id 转换为字符串:

我应该把这个类变成一个服务并让主 Activity 在它关闭时停止这个类吗?我应该像这样将 Activity 中的 Context 传递给这个类吗?

或者有没有更好的方法来处理这个问题?

当我尝试从此类中发送 Toast 时,也会出现此问题。

更新: Erich 和 Janusz 向我指出了完美运行的类的方向AsyncTask,除了它创建了一个新线程并且从不终止该线程。这意味着每次用户按下按钮时,都会添加另一个线程,而旧线程只是坐在那里。