异步任务需要很长时间才能完成这项工作

时间:2013-01-21 11:59:18

标签: android android-asynctask telnet

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

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

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

3 个答案:

答案 0 :(得分:25)

你可以试试这个:

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

答案 1 :(得分:2)

您还可以定义自己的自定义超时,以防您不希望用户在过去一定时间内等待网络服务的回答。

答案 2 :(得分:0)

目前,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对象。但是,在doInBackground()返回后,Android似乎只是重置了优先级。