【发布时间】:2021-01-23 10:06:56
【问题描述】:
这是我要写的代码
void longRunningMethod() {
new Thread(new Runnable() {
@Override
public void run() {
//a time consuming task
updateUi();
}
}).start();
}
public void updateUi(){
Collections.sort(playerArrayList, Collections.reverseOrder(new Comparator<Player>() {
@Override
public int compare(Player p1, Player p2) {
return Integer.valueOf(p1.getScore()).compareTo(p2.getScore());
}
}));
adapter.notifyDataSetChanged();
//some more code here
}
首先:当我从线程调用 updateUi() 时,它会在调用它的线程上运行(即 longRunningMethod() 的线程)还是会在主线程中运行?
其次:在代码中,我正在对自定义对象的数组列表进行排序,在主线程中运行它是否安全?还是我应该使用另一个线程?
我知道关于使用完成侦听器的任务实现,但我想在不同的线程上运行 updateUi 方法只是为了更安全。
【问题讨论】:
-
updateUi 没有在主线程上运行
-
旁注:如果您使用 java 8 或更新版本,您的比较器可以写得更简洁,例如:
Comparator.comparing(Player::getScore).reversed() -
SideNote2:(其实整行甚至可以写成
playerArrayList.sort(Comparator.comparing(Player::getScore).reversed());)
标签: java android multithreading runnable