android - AsyncTask 随机停止

标签 android android-asynctask

我有一个基于拉取的应用程序,它必须每 15 秒从服务器拉取一次。为此,我使用了一个普通的 AsyncTask,我的代码基本上是这样的:

protected Void doInBackground(Context... arg0) {
   while (true && this.pull_on ) {
     pull_data();
     TimeUnit.SECONDS.sleep(15)
};

现在我遇到了一个巨大的问题,即应用程序突然停止退出。 没有异常,AsyncTask 的状态为“正在运行”,“pull_on”变量设置为“true”,但它只是停止拉动。

我不能不重现这个,它有时会发生,我可以完美地工作很长时间然后就停止了。

有人知道这是怎么发生的吗?

我应该用计时器重构和实现它吗?

此外,与我所知道的相比,使用服务有什么好处?电池电量不是问题。

感谢您的帮助。

附言我应该补充一点,有时我从 AsyncTask 开始 Activity 。就像这个 'ApplicationManager.getCurrentActivity().startActivity( myIntent )' 但我不会成为问题。

附言

定时器接缝对我想使用的东西有限制,我确实想每 15 秒做一些事情,但在某些特殊情况下我想停止 ping 然后重新启动它。与使用 AsyncTask 相比,接缝的黑客攻击量要多得多。

最佳答案

这是一个糟糕的设计。您不希望每 15 秒在背景上无限循环一次。当应用程序被推送到后台时,这会耗尽电池电量,这是主要问题之一。

一种正确的方法是发出警报并对其使用react。计时器也是不错的选择。

我建议您考虑将其转移到服务中,这就是它的样子

A Service is an application component that can perform long-running operations in the background and does not provide a user interface

它讨论的是长时间运行的操作,但将经常性操作转移到服务中也很有意义。

关于服务的官方文档在这里:http://developer.android.com/guide/components/services.html

关于android - AsyncTask 随机停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13935948/

相关文章:

android - 具有 DiffUtil.ItemCallback 的 ListAdapter 始终认为对象相同

android - 有没有办法检测应用程序中不需要的修改?

android - 保存图片到sdcard android目录问题

java - AsyncTask 中没有任何方法被调用

java - Android AsyncTask 与 ProgressDialog - 空对象引用

java - 如何在android中设置少数 fragment 为横向模式而其余部分应为纵向模式?

android - 从已签名的 apk 在某些设备上获取 "App Not Installed"

android - 如何在加载数据时实现progressBar?

android - AsyncTask 完成后重新启动完整的 Android 应用程序

java - 从 NPM json-server 获取数据抛出 NetworkOnMainThreadException