问题标签 [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 投票
4 回答
6264 浏览

java - 从 AsyncTask 返回对象的问题

我有一个扩展 AsyncTask 的类(RestClient.java):包 org.stocktwits.helper;

我正在尝试在我的主类(Main.java)上执行 AsyncTask:

json 为空,因为它在 onPostExecute() 之前被调用。我怎样才能得到我的 JSON?

更新:我需要在 onPostExecute() 中运行这个 try 块:

0 投票
2 回答
1578 浏览

android - 尽管状态为 RUNNING,但 AsyncTask 有时不运行?

在我的应用程序中,我在 Activity 启动时使用 AsyncTask 来获取特定联系人的铃声。

它工作正常,但我注意到如果应用程序在 AsyncTask 进入 doInBackground 方法之前停止了两次,那么当 Activity 再次启动时,AsyncTask 无法正常运行,只能进入 onPreExecute() 方法。

这是我的代码:

AsyncTask 本身:



我在启动时调用 AsyncTask 的地方:



问题发生在我在 AsyncTask 完成之前启动活动并关闭 Activity 时,如果这种情况发生一次,它似乎很好,但在第二次发生后,AsyncTask 只会进入 onPreExecute() 方法并且永远不会完成再次,直到应用程序被强制停止并重新启动。

有没有人知道为什么会发生这种情况?

0 投票
1 回答
1168 浏览

android - 在之前被取消后,在 Activity 启动时运行的 AsyncTask 失败

当我的应用程序启动时,我正在使用 AsyncTask 来获取联系人的铃声,它可以正常工作,直到我的 Activity 在 AsyncTask 期间关闭几次之后,在这种情况下,AsyncTask 只会到达 onPreExecute() 并且永远不会 doInBackground ,所以在强制停止或设备重启之前,我永远无法获取铃声。

谁能解释为什么会发生这种情况?

为什么 AsyncTask 会到达 onPreExecute 但从不运行 doInBackground()?

这是我的代码:(按照货架源代码)





--




onAddRingtone() 用于 onCreate 和 onCancelRingTone() 用于 onDestroy() 以及您可以在上面的代码中查看的位置。

我已经花了3天的时间,我还没有找到解决方案?我采取了错误的方法吗?使用取消错误?有错误吗?

0 投票
3 回答
11390 浏览

android - 异步任务错误处理

我正在使用AsyncTask执行一些背景计算,但我无法找到处理异常的正确方法。目前我正在使用以下代码:

我相信变量 e 可以由主线程和工作线程写入/访问。据我所知,这onPostExecute()只会在doInBackround()完成后运行,我可以省略任何同步吗?

这是坏代码吗?是否有一种商定或正确的方法来处理异常AsyncTask

0 投票
1 回答
2996 浏览

java - 使用 AlarmManager 在 AsyncTask 中下载失败时如何运行重试

我使用 anAlarmManager来运行一个尝试从网络下载文件的服务。如果失败,我想在 5 分钟内重试该服务。

在服务内部,我运行一个AsyncTask来运行我的代码。据我所知,我可以判断它是否失败的唯一方法是从onPostExecute().

再次实施该服务重试的最佳方法是什么?

0 投票
1 回答
1516 浏览

android - 如何在 Android Activity 中处理通知

我有一个 Activity,它将每 x 秒查询一次 RESTful API(使用处理程序进行轮询)。GET 的结果用于更新 ListView。这是使用 AsyncTask 完成的。

当新数据中满足某些条件时,我想在通知栏中放置一个通知。到目前为止,我所阅读的所有内容都表明应该使用服务创建和更新通知,以便即使应用程序不在焦点上也可以发出通知。我看到了这方面的积极方面。

但是,我不确定我是否应该从我的活动中创建一个服务,或者我是否需要做一些比这更复杂的事情。我还没有决定是否应该放弃我的 AsyncTask 模型,转而使用服务来更新我的列表视图。

所以,我的问题是:

1)是否有一个很好的教程来展示如何从活动中创建本地服务?

本教程不需要展示如何使它们通信,服务可以与主要活动隔离。

2) #1 会为我提供我正在寻找的通知福利吗?(即使主应用程序不可见也会生成通知)

3) 我应该使用相同的服务来更新我的列表视图吗?

该服务基本上会进行与 AsyncTasks 相同的查询,只是对结果执行不同的操作。该应用程序似乎更有意义,具有服务查询,进行通知处理,然后将结果提供给活动,但我还没有找到一个很好的资源来清楚地展示如何做这样的事情。

如果需要,我可以添加任何必要的代码或进一步解释。

0 投票
2 回答
3907 浏览

android - 许多 AsyncTask 产生的 AsyncTask 性能问题。

我正在尝试为来自设备和网络的图像创建一个惰性图像加载器,用于ListView. 我正在考虑使用什么以及如何使用,一方面我可以使用一个线程来汇集我的请求(始终运行,我可以附加一个视图和一个适配器,它将为我处理图像加载),缓存我已经加载图像并在加载之前检查图像的可见性,这样我就不会做不必要的工作。

我有另一个想法使用AsyncTask论坛中的许多建议。不过有一个缺点。new MyTask().execute(urls); 如果我想开始加载和停止按需加载图像,我看到很多人使用这会出现问题。如果我对每个图像使用异步任务,那么我需要为每个图像创建新的异步任务,这是很多“新”任务,我可以使用一个池,但是如果太多异步任务被卡住,我仍然会创建大约 150- 200个asyc任务,对我来说太多了......

你们有什么感想?我认为一个线程在这里会做得更好:

  1. 继续跑直到被杀
  2. 尝试从队列中获取工作,如果没有工作,请等待。
  3. 如果有工作,请获取并开始处理。
  4. 每个请求都单独处理,串行并阻塞线程。
  5. 一旦确实继续使用“2”。
  6. startLoadingImage()适配器为需要显示的视图完成的每个入队都将创建一个新作业并在等待锁上调用通知。

如果我想要多个并行的 GET\POST 请求,我可以使用线程池优化此代码。此外,我正在缓存我已经下载\加载的图像,以便在下次访问时快速加载。这个想法是最小化 GC 和列表滞后。

0 投票
3 回答
14448 浏览

android - 在 Android 上使用 TextView 和 Html.ImageGetter 异步显示图像?

我想设置一个来自TextView以下SpannableString方法的:

但是ImageGetter这里需要重写下面的方法:

因为我需要从互联网上获取可绘制对象,所以我必须异步进行,似乎不是。

如何让它发挥作用?谢谢。

0 投票
5 回答
17174 浏览

android - android设计注意事项:AsyncTask vs Service(IntentService?)

我正在设计一个需要执行以下步骤的android应用程序:

  1. 用户按下按钮或以其他方式指示“同步数据”。
  2. 同步过程将使用 REST Web 服务将数据移入和移出服务器。
  3. 数据将本地存储在 sqlite 数据库中。
  4. 同步过程应向 UI 提供状态更新/消息
  5. 不应允许用户在同步过程中徘徊到应用程序的其他部分并做更多的工作。

第一次运行同步过程可能需要 10-20 分钟。初始同步后,传输和存储的数据将减少,我预计该过程需要 1-2 分钟或更短的时间。

我一直在阅读有关 androidAsyncTask和使用服务的各种示例的大量信息……但我并不完全理解选择一种设计而不是另一种设计的设计注意事项和权衡取舍。我目前使用 AsyncTask 将我的演示项目存根。观看(大部分)开发 Android REST 客户端应用程序后: http ://code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html#我对此处描述的设计模式感到困惑感觉过于复杂,也许是因为我只是“不明白”。

我来自 java、spring、web 和桌面应用程序背景。在手持设备方面进行思考和设计对我来说是相当新鲜的。(更改屏幕布局时会发生什么?当我运行同步时电话响起会发生什么?)退后两步,如果初始同步将是一个如此漫长的运行过程,有没有更好的方法我要考虑问题->解决方案、用户体验、用户对手机上运行的应用程序的期望?

很想听听一些更有经验的安卓开发者的意见,他们已经在这些问题上苦苦挣扎。

0 投票
2 回答
74218 浏览

android - 如何在 Android 中进行后台工作时使用 AsyncTask 显示 ProgressDialog?

可能重复:
从 AsyncTask 更新 Activity 中的进度对话框

我正在开发我的第一个 Android 应用程序,我需要在后台任务(在这种情况下只是服务器上的 http 调用)发生时显示 ProgressDialog。我对此进行了一些研究,并且已经检查了与该主题相关的其他线程。

http://developer.android.com/reference/android/os/AsyncTask.html

Android 显示 ProgressDialog 直到活动 UI 完成加载

安卓闪屏

http://android-developers.blogspot.com/2009/05/painless-threading.html

其中。

比我要写一些代码:

1)在我的活动中,我声明一个变量为 ProgressDialog 类型

2)我还编写了一个内部类来根据需要扩展 AsyncTask,在 doInBackGround 中,我调用了一个静态方法,该方法实际上对服务器执行 POST http 请求,在服务器端我已经阻止了服务器响应 20 秒来验证进度对话框。

3)当按下按钮时,我会构建 ProgressDialog 并调用我创建的 AsyncTask:

好吧,就是这样,我相信这是假设在 AsyncTask 将在后台查询服务器时显示一个进度对话框,但我得到的是在服务器响应到达之前没有进度条,而不是一小部分时间(不到 1 秒) 进度显示并调用下一个 Activity。

正如我所提到的,我已经重新检查了这段代码,但根本找不到我出错的地方。有什么建议么?

先感谢您。

嗨,正如 Charlie Sheen(???) 在该线程的第一个答案中所建议的那样,我尝试更改了一些代码,现在它就像(不幸的是,到目前为止它没有按预期工作):

而不是做所有的工作来处理 AsyncTask 中的响应:

完成 OnClickListener: