Android在不使用AsyncTask的情况下管理线程

时间:2014-02-20 11:44:19

标签: java android multithreading

我正在开展一个项目,我需要提高我对线程的了解。

情境: 我有一个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的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

在线程的run()方法的最后,使用以下之一:

  • View类的post()方法,

  • Activity类的runOnUiThread()方法

以便在UI线程中刷新UI。

您可以使用相同的方法以某种方式在run()方法的开头改变您的UI(禁用相同的小部件,显示某种进度指示器......)