我正在开展一个项目,我需要提高我对线程的了解。
情境: 我有一个Activity调用一个使用线程的方法:
Object soapResponse = soaphttp.fetchNextCatalogueRange(0, numberOfItems);
在soaphttp课程中,我有:
Thread soapThread = new Thread(new Runnable()
{
private Object serverResponse = new Object();
public void run()
{
// Do network stuff here
}
});
soapThread.start();
try
{
// crude synchronisation
soapThread.join();
}
问题 使用join()阻止UI线程。 如果我不使用join(),我会得到空指针异常(数据同步错误)
挑战: 在我的活动中,我想在UI线程上做一些事情,而soaphttp类正在获取数据然后同步,即告诉UI线程数据已准备就绪。 例如,显示一个进度条..它将在数据完成提取后终止。
如何在不使用AsyncTask的情况下执行此操作?
答案 0 :(得分:0)
在线程的run()方法的最后,使用以下之一:
View类的post()方法,
Activity类的runOnUiThread()方法
以便在UI线程中刷新UI。
您可以使用相同的方法以某种方式在run()方法的开头改变您的UI(禁用相同的小部件,显示某种进度指示器......)