【发布时间】:2013-01-04 11:27:36
【问题描述】:
我需要从设备发送一个命令,progressdialog 应该显示进度,直到命令完成。为此,我在我的应用程序中使用asynctask。
但是完成命令需要很长时间。
那么,有没有办法将 asynctask 的优先级设置为最大?
任何建议将不胜感激。 提前致谢
【问题讨论】:
标签: android android-asynctask telnet
我需要从设备发送一个命令,progressdialog 应该显示进度,直到命令完成。为此,我在我的应用程序中使用asynctask。
但是完成命令需要很长时间。
那么,有没有办法将 asynctask 的优先级设置为最大?
任何建议将不胜感激。 提前致谢
【问题讨论】:
标签: android android-asynctask telnet
你可以试试这个:
protected Void doInBackground() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
/* do the work */
}
【讨论】:
setPriority 将无效。
您还可以定义自己的自定义超时,以防您不想让用户在指定时间之后等待来自网络服务的答复。
【讨论】:
目前,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() 返回后重置了优先级。 .
【讨论】: