今天在写程序时,有用到通过发送消息去改变UI这么的一个过程,可是在测试时发现我的应用出现闪退。
程序打大致流程是发送消息——>接收消息——>UI发送变化(主要是imageview与textView发生改变),可在程序运行的过程中发现基本的textview.setText()都报错了,当时还以为是控件初始化错误,经debug发现控件是初始化成功的,然后就试着在onCreate函数中执行textview.setText(),发现没问题,当时就想到是不是不是在主线程更新UI所以导致出错了。
之后就检查我的代码,发现在发送消息的时候我用的是dispatchMessage就试着换中方法用sendMessage,结果果然没有保错。后来上网查这两者的区别,说的人不多,大致好像是因为dispatchMessage是新开了一个线程,而sendMessage是在主线程,所以更新UI的时候报错了,这也应证了安卓只能在主线程更新UI这一情况了。