【问题标题】:How should I use Executor insteand of AsyncTask or IntentService for queueing task on Android?我应该如何使用 Executor 而不是 AsyncTask 或 IntentService 在 Android 上排队任务?
【发布时间】:2010-10-14 11:06:31
【问题描述】:
  1. 这是一个好的解决方案吗?

  2. 如何实现?

  3. 什么时候应该正确关机?我在 Activity 中关闭它 onDestroy(),然后尽快重新启动我的应用程序。它导致java.util.concurrent.RejectedExecutionException,为什么?有人知道它的生命周期吗?

有什么想法吗?谢谢。

【问题讨论】:

  • 我改在onCreate中创建Executor而不是static后,异常消失了。

标签: android concurrency service android-asynctask executor


【解决方案1】:

我刚刚发现AsyncYask 已经实现了 Java 的并发执行器,core_pool_size 5 和 max_pool_size 128。太棒了!

【讨论】:

    【解决方案2】:

    1. 是的,我想是的。 AsyncTask 用于那些将更新 UI 的任务。抱歉,我不熟悉 IntentService。
    2. 创建一个实现android.app.Application 接口的应用程序对象。在 onCreate 方法中创建 Executor。您可以使用以下语句获取您的 Application 对象:

      MyApplication app = (MyApplication) context.getApplicationContext();

    3. 我不确定您所说的“应用程序破坏”是什么意思。我认为你可以在 Application 的 onTerminate 方法和 onLowMemory 方法中关闭 Executor。

    【讨论】:

    • 抱歉我的错字,我的意思是活动中的 onDestroy()。我不知道为什么我关闭应用程序(关闭执行程序)并再次重新启动应用程序,它因 RejectedExecutionException 而崩溃。当它没有完全关闭并再次使用旧的执行器时,它似乎执行了任务。为什么?
    • 也许你可以把你的一些代码贴在上面,这样我们就可以更多地了解你的问题。顺便说一句,我认为最好在 Application 对象中创建和关闭 Executor(就像我在回答第二个问题时所说的那样),因为 Executor 是一个沉重的对象,用户可以非常频繁地启动和退出 Activity,但 Application 对象会除非应用程序进程被杀死。而如果Executor是在Activity中创建的,那么很难从这个Activity之外重用Executor。
    • 感谢您的提示。我认为这就是为什么它不能在 Activity 的生命周期中使用。
    • onTerminate() 方法在进程被杀死时不保证运行。
    猜你喜欢
    • 2013-02-16
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多