AsyncTask替代简单案例

时间:2012-04-10 09:33:36

标签: java android multithreading

当我想在后台做某事时,如果动作非常简单:就像做“背景中的某些事情”然后更新UI,而不是使用AsyncTask我正在考虑使用(仅用于更快的编码):

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

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

但我真的不知道使用“最终”对象是否会导致内存泄漏或出现其他类型的问题。

使用这种方法好吗?

2 个答案:

答案 0 :(得分:3)

final只对编译器说你不会在代码中重新分配objects变量。 final与内存泄漏之间没有联系。

如果您使用匿名内部类(new Runnable...),则必须使objects成为最终内容。

我对Android不是很熟悉,但如果您的updateUIWith()方法确实与UI对象交互,那么可能会出现问题,因为我认为UI更新需要在特定的UI线程中运行。如果你不更新该方法中的UI对象,那么你的代码应该没问题。

答案 1 :(得分:0)

问题是:为每个小动作打开一个新主题是一个好主意吗? AsyncTask提供了由其他人管理的线程的便利,但是当你像你一样声明一个线程时,你负责处理线程数限制等情况。