【问题标题】:AsyncTask for long interval task用于长间隔任务的 AsyncTask
【发布时间】:2014-08-06 07:53:31
【问题描述】:

我有我的应用程序,它从服务器下载和上传数据(我的 WebApp 是用 Java 编写的,因此使用 SOAP 网络服务在我的 Android 应用程序和 Java Web 应用程序之间进行通信)。

到目前为止我一直在使用

AsyncTask

用于调用 WebServices 下载/上传数据。

到目前为止,下载的数据量很少。 但是当我从服务器下载大量数据时,应用程序崩溃了。

参考 android ref doc。

AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent pacakge such as Executor, ThreadPoolExecutor and FutureTask.

所以我认为这是 AsyncTask 用于更长时间间隔的问题。

这是similar old post

但我无法弄清楚如何使用其他线程技术调用 Web 服务,例如:Thread Pool Executor,Future TaskExecutor

下面是我的 LogCat:

嘿,现在还有一个问题。我已将IntentService 用于那些长期运行的网络操作(下载)。现在由于我的数据在下载时足够大。因此,如果在下载过程中互联网连接丢失,那么我必须停止我认为可以使用的 IntentService。

stopService(new Intent(MainActivity.this, IntentServiceClass .class));

调用,

onDestroy()

服务。但是写的代码,

onHandleIntent(Intent intent)

将继续执行。 (这不应该发生)。

【问题讨论】:

  • 这里有一个例子可以帮助你programmingexamples.wikidot.com/threadpoolexecutor
  • 你能把logcat的错误贴出来
  • 您是否考虑过使用 Android Service 进行这些冗长的操作?
  • @Fildor:我可以在Service上进行网络操作吗?因为它给了我android.os.NetworkOnMainThreadException

标签: java android multithreading web-services android-asynctask


【解决方案1】:

任何此类长任务都应使用 android 服务。基本问题是 Android 中的应用程序生命周期。操作系统可以停止任何活动和相关线程。相比之下,服务会在后台运行,直到它暂停或完成或其他任何事情。

还存在用于在服务和活动之间进行通信的可靠的状态等通信方式。

有关如何获取服务和活动进行通信的详细信息,此question 有很多非常有用的信息

【讨论】:

  • 是的,我认为Intent Service 可以解决
  • 但是我必须跟踪服务运行的状态,即它是否已完成(在我的情况下才需要它,然后我才能进入下一个活动)&另一个缺点是你不能更新UI 通过那个。有什么办法可以克服这个缺点。
  • @RohitKKK 编辑以添加额外的链接以与您的应用程序对话
  • 我已经使用了 Intent 服务,但是这次它给我一个大下载的错误,它给了我错误:找不到源,android.jar 没有源附件。 // 编译自 Throwable.java (version 1.5 : 49.0, super bit) public class java.lang.Throwable implements java.io.Serializable {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多