据我所知,我已经实现了一个在新线程上创建的可运行程序。然而,这个线程似乎没有在后台运行,而在可运行程序内部执行的操作会因为过重而导致用户界面停滞。
请参见下面:
custListLoadThread = new Thread(loadRunnable);
custListLoadThread.run();
private Runnable loadRunnable = new Runnable()
{
@Override
public void run()
{
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
Gen.popup("TEST"); // Creates a toast pop-up.
// This is to know if this runnable is running on UI thread or not!
try
{
customers = Db.BasicArrays.getCustomers(CustomApp.Session.businessCode, empId);
runOnUiThread(new Runnable() {
@Override
public void run() {
populate();
setCustListVisible(true);
loading = false;
}
});
}
catch (final Exception ex)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
Gen.popup(ex.getMessage());
}
});
}
}
};
然而,这段代码并没有在后台运行,仍然似乎在UI线程上运行。我添加了Gen.popup("TEST");
用于确认此情况(在非UI线程中调用toast
弹出应该会引发错误)。
有任何想法,为何这个可运行程序没有在后台运行?
run
和start
的相似性给搞混了! - Mike Baxter