是View类的invalidate()函数是一个阻塞函数吗? [或者,logcat是否显示日志消息乱序?]

时间:2013-09-17 10:16:55

标签: android logcat android-logcat

在此代码中,

Log.d("MYLOG", "i_confirm in Activity BEFORE = "+Integer.toString(i_confirm)); // LINE 1
theGraph.invalidate();
i_confirm = theGraph.ret_i_confirm(); // LINE 2  

logcat显示由第1行和第2行中的函数引起的输出,然后向我显示onDraw() theGraph函数内的另一条logcat消息,该消息扩展了View类。上面的代码在我的MainActivity类中,在按下命令按钮时执行的函数内部。

invalidate()是非阻塞方法吗? onDraw()invalidate()内的所有其他内容是否与主程序的执行一起被调用?或者logcat是否可能无序显示日志消息?

1 个答案:

答案 0 :(得分:1)

由于阻塞方法是阻止当前执行线程进一步操作直到函数返回的方法。因此,当您调用invalidate时,查看可能很复杂或may take alot of time to redraw or update,因此在Android OS中,View.invalidate会告诉系统the main thread goes idle重新绘制视图(通过onDraw)。也就是说,调用invalidate会在所有其他即时工作完成后重新绘制您的视图。

希望这有帮助