2013-01-15 110 views
0

我認爲這是一個初學者(我)的問題,然後爲你們很容易回答。在android上執行線程

我有這樣的方法:

public void onQuantityTextChange(final int value) 
{  
    new Thread(new Runnable() { 
     public void run() { 
      addProductToCart(value); 

      view.post(new Runnable() { 
       public void run() { 
        updateTotals(); 
       } 
      }); 

     } 
    }).start(); 
} 

我的問題是:這個和平的代碼:

view.post(new Runnable() { 
public void run() { 
    updateTotals(); 
} 

只有當執行(完)此addProductToCart(value);方法被執行?或者使用AsyncTaskdoInBackground()onPostExecute()更安全?

+0

1 /是的。 2 /兩種工作。 Asynctask基本上這樣做,但有很多有用的功能。我建議始終使用asynctask – njzk2

回答

1

它總是後執行:addProductToCart(value); 但如果該功能啓動ThreadAsyncThread或相似則該函數將這個任務完成之前返回。

總結:沒有人可以無addProductToCart

0

的內容在很大程度上取決於是否你的方法addProductToCart(value)開始了自己的另一個線程回答。如果確實如此,那麼線程無法保證,因爲線程會在系統認爲合適時開始和結束。如果不是,那麼在線程完成之前您不會調用view.post(...)

另一件需要注意的問題取決於你想要完成的是view.post(...)中的方法不能保證立即運行。該方法所做的是將Runnable對象放入消息隊列中。這意味着,只有在消息隊列中的其他元素首先執行時,該可運行的纔會執行。其次,消息隊列可以隨時運行,即使這是隊列中的第一個Runnable,它將最終啓動,但不一定立即。

相關問題