Android环境下主UI线程与子线程通信机制研究.docAndroid环境下主UI线程与子线程通信机制研究
1问题的引出
如果需要用从X络上下载一个图片到自己的上,在onCreate方法中可以如下图1所示的代码。通过代码会获取并显示所需要的位图。但其中隐藏着一个非常危险的问题——代码本身就是运行在主线程上。Android系统只能运行一个主线程,而且只有主线程能够与屏幕之间进行任意权限级别的交互。这意味着,当代码等待X络回传图片数据的时候,任何内容都无法显示到屏幕上。这段获取图片的代码会限制在上任意地方执行任意操作。所以如果主线程被绑架,那么它在被释放之前,系统就不会响应按单击事件,不能接,屏幕上不能显示任何内容。这对于用户来说是灾难性的。
2什么是子线程
为了有效解决被绑架的问题,提高用户体验,提出了子线程。在Android的布局界面中,可以实现按钮的单击、TextViesg)方法,该方法会在Handler对象接收到消息时被调用。那么这三个类之间协同合作,才能有序地完成子线程与主UI线程之间的通信。
要创建子线程对象,就需要使用Thread类。要创建该类需要实现Runnable接口的抽象方法run(),在run()方法中需要添加子线程所要运行任务的代码。其次,Sleep(longtime)方法是让线程休眠,其中time为休眠的时间,单位时毫秒。最后一定要用start()方法运行线程。之后该子线程就可以开始工作了。
子线程在特定情况下需要通过Handler发送Message给主UI线程,委托主UI线程进行一些与界面相关的处理,所以,发送消息的Handler类也是其中的一个很重要的类。
Message类型的消息中包含了一个int类型的成员对象sg),其中,msg是消息对象。Message类型的消息中包含了一个int类型的成员对象sg),,消息队列里面用于存放消息。Looper对象用来为一个线程开启一个消息循环,用来操作消息队列。
Android环境下主UI线程与子线程通信机制研究 来自淘豆网m.daumloan.com转载请标明出处.