我注意到在动画过程中调用了主循环程序,如果ui线程做的是劳动密集型工作,则跳过某些动画。解决此问题的一种方法是运行一个线程或可运行或可调用的线程,然后将它们加入ui线程(自动进行可调用,并通过调用在ui线程上运行来手动进行)。
但这是否意味着ui线程可能在重要的事情期间被线程中断? 即,如果线程返回一些数据,但是ui在更新旧数据时正在使用旧数据。还是在ui线程上运行以更新数据之前,线程是否等待下一个主循环程序?
我不是在问如何避免2个线程做2个类似的事情,而是在调用ui线程上运行时是否特别中断了主线程。或等待它完成(例如动画的行为方式,跳帧,但是当主线程完成时,动画会继续平稳进行,除非再次进行更费劲的工作)
答案 0 :(得分:0)
Uncaught ReferenceError: dfds is not defined
的工作方式
在UI线程上运行指定的操作。如果当前线程是 UI线程,然后立即执行操作。如果当前 线程不是UI线程,操作已发布到事件队列 UI线程。
因此,要通过使用您发布的场景来理解它,其工作原理类似于,主线程将执行其正在处理的当前事件,并将您的事件添加到UI线程的事件队列中。
答案 1 :(得分:0)
尝试一下:-
runOnUiThread (new Thread(new Runnable() {
public void run() {
while(i++ < 1000){
btn.setText("#"+i);
try {
Thread.sleep(300);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}));