在此代码中,
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是否可能无序显示日志消息?
答案 0 :(得分:1)
由于阻塞方法是阻止当前执行线程进一步操作直到函数返回的方法。因此,当您调用invalidate时,查看可能很复杂或may take alot of time to redraw or update
,因此在Android OS中,View.invalidate会告诉系统the main thread goes idle
重新绘制视图(通过onDraw)。也就是说,调用invalidate会在所有其他即时工作完成后重新绘制您的视图。
希望这有帮助