android开发中的多线程之进程与线程

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:44 我要评论(0)

进程与线程

一般来说,Android中为一个应用程序开启一个进程进行执行,在这个应用程序中的所有组件,通过单独的线程进行执行,而其中所有的线程,共 享该应用程序进程的资源。当一个应用程序启动的时候,Android系统启动一个新的Linux应用程序的进程和一个执行线程。默认情况下,一个应用程序 运行中的所有组件运行在相同的进程和线程中,这里的线程一般称为主线程。如果一个应用程序的组件开始的时候,已经存在一个进程,那么应用程序会在与它相同 的执行线程中开始这个组件。

进程

默认情况下,同一应用程序下的所有组件运行在同一进程中,大多数应用程序不应该改变这个。然而,如果需要控制那个进程属于那个组件,可以在 AndroidManifest.xml文件中进行配置。一般来说,组件元 素:<activity>、<service>、<receiver>、<provider>均支持一 个android:process属性,可以设置这个属性让不同的组件单独运行在自己的进程中,也可以使用这个属性使不同的应用程序组件运行在相同的进程 中,并共享相同的Linux用户ID和赋予同样的证书。

Tips:<application>元素也支持android:process属性,用于设置所有的组件。

Android在内存较低的情况下,会关闭一些优先级较低的进程以增大内存运行更重要的进程,而在这个进程中的所有线程,也会被同时销毁。在内 存足够的情况下,Android系统会视图尽可能保持应用程序进程,以达到下次的运行的快速启动,但最终需要移除旧的进程,回收内存用于新的或更重要的进 程。通过进程的优先级来判断是否被回收,一般会回收优先级低的进程,以给优先级高的进程腾出资源。

下面是五类Android进程,他们的优先级顺序排列:

Foreground process:前台进程。

Visible prcess:可见进程。

Service process:服务进程。

Background process:后台进程。

Empty process:空进程。

Tips:一个进程的优先级是可以变化的。

线程

当应用程序启动时,系统会创建一个执行线程在这个应用程序的的进程中,一般被称为 主线程 。这个线程是非常重要的,因为它负责把事件分发给响 应的用户组件,包括绘制事件等,因此主线程又被称为UI线程。系统并不会为每个组件创建一个单独的线程,而是在UI线程中,完成这些组件的初始化的,因此 系统回调方法是运行在UI线程中,如click事件。

当程序执行比较复杂的工作来应对用户交互的时候,哪怕应用程序被正确的执行了,单线程模式也可能会导致运行性能很低下。举例来说,如果一切的应 用功能都发生在UI线程中,当执行耗时操作的时候,如访问网络或查询数据,均会阻塞UI先,将导致其他的事件不被分发到事件队列中,包括屏幕绘制事件。导 致从用户的角度来看,应用程序死掉了。而在Android系统中,当UI线程被阻塞超过几秒钟(大约是5秒)的时候,会弹出 应用程序没有响应 的对话 框,造成用户体验差,可能会迫使用户决定退出你的应用或者干脆直接卸载它。

此外,Android的UI ToolKit包下的所有组件都不是线程安全的,所以,不能在一个单独的工作线程中操作这些UI组件,必须在UI线程中操作。因此,对于单线程模 型,Android有两个规则:

不能阻塞UI线程

不能在工作线程中访问Android UI ToolKit包下的组件。

对于耗时的操作,应该放在单独的线程中。例如:下面通过一个Demo监听按钮点击事件,下载一个图片,从单独的线程中,并显示在一个 ImageView中。

1btnError2.setOnClickListener(new View.OnClickListener() {

2@Override

3public void onClick(View v) {

4// 增加一个线程访问网络

5new Thread(new Runnable() {

6@Override

7public void run() {

8// 获取地址下的图片

9Bitmap btm=loadImageFromNetwork

("http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg");

10imageView1.setImageBitmap(btm);

11}

12}).start();

13

14}

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...