当我想在后台做某事时,如果动作非常简单:就像做“背景中的某些事情”然后更新UI,而不是使用AsyncTask
我正在考虑使用(仅用于更快的编码):
new Thread(){
public void run(){
final ArrayList<myObjects> objects= myDatabase.queryObjects();
runOnUiThread(new Runnable() {
@Override
public void run() {
updateUIWith(objects);
}
});
}
}
但我真的不知道使用“最终”对象是否会导致内存泄漏或出现其他类型的问题。
使用这种方法好吗?
答案 0 :(得分:3)
final
只对编译器说你不会在代码中重新分配objects
变量。 final
与内存泄漏之间没有联系。
如果您使用匿名内部类(new Runnable...
),则必须使objects
成为最终内容。
我对Android不是很熟悉,但如果您的updateUIWith()
方法确实与UI对象交互,那么可能会出现问题,因为我认为UI更新需要在特定的UI线程中运行。如果你不更新该方法中的UI对象,那么你的代码应该没问题。
答案 1 :(得分:0)
问题是:为每个小动作打开一个新主题是一个好主意吗? AsyncTask提供了由其他人管理的线程的便利,但是当你像你一样声明一个线程时,你负责处理线程数限制等情况。