在没有AsyncTask的情况下运行UIthread

时间:2011-10-06 15:42:07

标签: android multithreading android-asynctask handler

在我的应用程序初始化期间,我有一个任务需要大约10秒的UI线程,我决定将它放在后台线程中并显示启动屏幕,而这正在进行..我使用AsyncTask工作了...但是由于AsyncTasks优先级被硬编码得如此之低,并且没有办法增加它我能找到的任务,任务从花了10秒钟完成到几分钟。

所以,我的问题是,如何在没有AsyncTask的情况下在NON UI线程上运行任务?到目前为止,我尝试过的所有内容似乎都在UI任务上运行,这会阻止SplashScreen在任务完成之后出现。

那么如何创建一个线程,在非UI线程上运行呢?我假设除了AsyncTask之外必须有一个选项,但到目前为止我还没有找到它......处理程序似乎只是在UI上运行,标准线程/ runnables也是如此。这必须是可能的,但我只是没有搞清楚。

2 个答案:

答案 0 :(得分:10)

既然你已经让AsyncTask工作了,也许你可以从doInBackground()内部突出它的优先级:

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

另外,对于Handler,不完全确定问题是什么,但是你需要在UI线程中创建Handler,显式启动一个不同的线程来完成你的工作,然后使用来自该新线程的处理程序将消息发布到UI线程。 AsyncTask很好,因为它会照顾你所有这些。

答案 1 :(得分:1)

只需创建Thread,设置您想要的任何优先级并start()。或者使用RunnableExecutor。那些不会在UI线程上运行。如果您需要在后台工作完成时通知用户界面,请在启动主题之前创建Handler并将其传递给Thread/Runnable