2012-04-10 113 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提供了由其他人管理的线程的便利性,但是当您像您一样声明线程时,您有责任处理诸如线程数量限制等情况。

相关问题