北大青鸟光谷校区

北大青鸟光谷校区

  • 北大青鸟徐东校区
  • 北大青鸟光谷校区
  • 北大青鸟宏鹏IT校区
  • 荆州青鸟之家
  • 襄阳青鸟之家

15902769092

百日千才

Android线程简介 北大青鸟安卓培训

2013-03-22 16:45来源:武汉北大青鸟光谷校区作者:武汉宏鹏

  武汉北大青鸟武汉宏鹏光谷校区安卓培训课程介绍之android线程简介。

        在Android之中子线程不能直接对主线程的组件进行更新。

  在Android里,默认一个程序用到的各种“组件”(如Activity、BroadcastReceiver、Service等)都会在同一个进程里面执行,而且由该进程的主线程负责执行。如果有特别的指定,也可以让特定“组件”在不同的进程里执行。无论这些组件是在哪一个进程里执行,默认情况下,它们都是由该进程里面的主线程来负责执行的。

  默认主线程除了要处理Activity的UI事件,还要处理Service后台服务工作,通常会忙不过来。而多线程的并行(Concurrent)就可以化解主线程过于忙碌的情形,即,主线程可以生成多个子线程来分担它的工作,尤其是比较冗长费时的后台服务工作(如播放动画的背景音乐、从网络上下载电影等)。于是,主线程就能专心于处理UI画面的事件了。

  在主线程里有一个消息队列(先进先出),系统先把消息加入到队列中,然后从这个队列的前端取出一个消息进行处理,处理完之后再取出第二个消息再处理……主线程在循环中检测是否有新的消息到来,如果没有消息在队列中,则主线程挂起等待。

  我们知道在Android中存在四大组件(Activity、BroadcastReceiver、Service、ContentProvider)。之前我们编写的大部分代码要么是其中一个组件的一部分,要么供其中一个组件调用。这些组件在项目功能清单文件中的结构如下:

<application>

<activity/>

<service/>

<receiver/>

<provider/>

</application>

  除了某些特例外,Android都将使用它的主线程来处理上述组件中的代码,当调用这些组件时,既可以异步调用,也可以通过消息队列延迟调用。下图1.1描述了线程与四大组件的关系。

安卓培训课程 北大青鸟武汉宏鹏光谷校区

  图1.1Android组件和线程框架

  从图1.1可以看出主线程通过一个消息队列执行所有工作----运行所有组件。主线程位于一个循环中并处理消息队列中的每条消息,如果任何消息用时超过5秒,Android就会抛出一条ANR消息。

  Android应用程序通常是运行在一个单独的线程(例如main)里。这意味着我们的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框。因此,运行在主线程里的任何方法都应尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作、潜在的耗时操作(网络或数据库操作)和高耗时的计算(如改变位图尺寸),这些操作应该在子线程里(或者通过异步请求的方式)来完成。然而,不是说我们的主线程阻塞在那里等待子线程的完成——也不是调用Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计应用程序,将能保证主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。

  Android线程的指导思想是:(1)把费时的工作交给子线程;(2)子线程把处理结果反馈给主线程。

        了解更多安卓培训课程内容以及android相关技术请继续关注武汉北大青鸟官网

关闭

只为了方便您就学 北大青鸟光谷校区 北大青鸟光谷校区

武汉市江夏区华泰街武昌理工学院对面

全真项目实战 入学签就业协议

Copyright (c) 2006-2021 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.