【问题标题】:async task taking too long to do the job异步任务花费太长时间来完成这项工作
【发布时间】:2013-01-04 11:27:36
【问题描述】:

我需要从设备发送一个命令,progressdialog 应该显示进度,直到命令完成。为此,我在我的应用程序中使用asynctask。 但是完成命令需要很长时间。

那么,有没有办法将 asynctask 的优先级设置为最大?

任何建议将不胜感激。 提前致谢

【问题讨论】:

    标签: android android-asynctask telnet


    【解决方案1】:

    你可以试试这个:

    protected Void doInBackground() {
        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    /* do the work */
    }
    

    【讨论】:

    • 有没有这个,你能感觉到不同吗?
    • @Yeung 对我来说,它让这个过程变得更慢了
    • 这在您执行任务时已经在运行一些其他任务时无济于事。在线程调度程序给您的任务一些时间来实际开始执行之前,您的 setPriority 将无效。
    【解决方案2】:

    您还可以定义自己的自定义超时,以防您不想让用户在指定时间之后等待来自网络服务的答复。

    【讨论】:

      【解决方案3】:

      目前,Android 对所有优先级为 THREAD_PRIORITY_BACKGROUND 或更差的线程使用后台线程 cgroup,THREAD_PRIORITY_BACKGROUND 为 10,THREAD_PRIORITY_DEFAULT 为 0,THREAD_PRIORITY_FOREGROUND 为 -2。

      如果您选择 THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE(又名 9),您的线程将被从后台 cgroup 中提升,但有 10% 的限制,但其重要性不足以经常中断您的用户界面线程。

       protected final YourResult doInBackground(YourInputs... yis) {
              Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
              ...
          }
      

      但请注意,底层实现可能会为不同的任务、下一个 AsyncTask 或其他任何事情重用相同的 Thread 对象。不过,Android 似乎只是在 doInBackground() 返回后重置了优先级。 .

      【讨论】:

        猜你喜欢
        • 2015-05-27
        • 1970-01-01
        • 2022-01-15
        • 2013-06-12
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多