1

当我想在后台做某事时,如果操作非常简单:比如做“在后台做某事”,然后更新 UI,而不是使用AsyncTask我正在考虑使用的(只是为了更快的编码):

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

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

但我真的不知道以这种方式使用“最终”对象是否会导致内存泄漏或其他类型的麻烦。

使用这种方法可以吗?

4

2 回答 2

3

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

如果您使用匿名内部类 (the new Runnable...),则必须将其设为objectsfinal。

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

于 2012-04-10T09:36:39.290 回答
0

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

于 2013-06-15T15:03:29.797 回答