2012-04-10 61 views
1

當我想要做的背景是什麼,如果動作很簡單:像做「的東西在後臺」,然後更新UI,而不是使用AsyncTask我正在考慮使用(只需更快的編碼):的AsyncTask替代簡單的情況下

new Thread(){ 
     public void run(){ 
      final ArrayList<myObjects> objects= myDatabase.queryObjects(); 
      runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       updateUIWith(objects);    
      } 
     }); 
     } 
} 

但我真的,如果使用「最終」不知道對象可以導致內存泄漏這樣或具有其他種類的煩惱。

就是採用這種方法好不好?

+1

代碼很好。除非並且直到你確定你沒有改變對象引用的狀態。 – Phani 2012-04-10 09:40:26

回答

3

final只說給你不會重新分配objects變量在你的代碼編譯器。 final與內存泄漏之間沒有關聯。

如果您使用匿名內部類(new Runnable...),您必須使objects最終。

我對Android不太熟悉,但是如果您的updateUIWith()方法確實與UI對象交互,那麼可能會出現問題,因爲我會假設UI更新需要在特定的UI線程中運行。如果您不更新該方法中的UI對象,那麼您的代碼應該沒問題。

0

的問題是:它打開一個新的線程爲每一個小動作一個好主意? AsyncTask提供了由其他人管理的線程的便利性,但是當您像您一樣聲明線程時,您有責任處理諸如線程數量限制等情況。

相關問題