Android应用程序的基本原理详解

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

Android应用程序是用Java语言编写的。编译过后的字节码,以及应用程序要求的其他数据和资源文件,通过aapt工具被绑定在一起,称为 Android包,这是一个带.apk后缀的档案文件。这个文件也是用户下载到他们设备上的文件。所有的代码在一个单一的.apk文件中,组成一个 应用程序 。

从许多方面来说,每个Android应用程序存活在它们自己的世界中:

默认地,每一个应用程序运行在它自己的Linux进程中。当应用程序的任何代码需要被执行时,Android启动进程;当不再需要时,或者系统资源被其他应用程序所要求时,关闭进程。

每一个进程有它自己的Java虚拟机(JVM),因此应用程序代码独立与所有其他应用程序代码而运行。

默认地,每一个应用程序被分配一个唯一的Linux用户ID。通过设置权限许可,应用程序的文件只对该用户可见,只对应用程序本身可见 虽然有办法将其导出到其他应用程序。

有可能安排两个应用程序共享同一用户ID,在这种情况下,它们可以彼此看见对方的文件。要保全系统资源,具有相同ID的应用程序也可以被组织起来运行在同一Linux进程中,共享同一VM。

2.1 应用程序组件

Android一 个最核心的特性是,一个应用程序可以利用其它应用程序的元素(假设这些程序允许这样做)。例如,如果你的应用程序需要显示一个滚动的图像列表,而其它应用 程序已经开发了一个合适的图像滚动器并且允许其被其他人使用,那么你可以要求使用该图像滚动器来完成这项工作,而不必自己再开发一个。你的应用程序不必合 并或链接到其他应用程序的代码。相反,当需要发生时,它仅是简单地启动其他应用程序。

要能如此地工作,系统必须在需要应用程序任何部分时,能启动该应用程序进程,并为该部分实例化Java对象。因此,不像在其他大多数系统上的应用程序,Android应用程序没有一个为应用程序的任何事设置单一的入口点(例如,没有main()函数)。相反,他们拥有一些主要组件,系统可以实例化这些组件并且根据需要来运行。总共有四类组件:

q Activities

q Services

q Broadcast receivers

q Content providers

2.1.1 四种组件简介

Activities

一个activity代表一个可视的用户接口,该接口致力于用户能做一些操作。例如,一个activity可能代表一个菜单项列表,用户可以从中选择,或者它可能显示带有标题说明的图像。一个文本消息应用程序可能有一个activity来显示一个联系人列表以发送消息,有第二个activity来写消息到被选择的联系人,以及其它activity来重新获取旧的消息或改变设置。虽然它们一起工作来形成一个内聚性的用户接口,但实际上每一个 activity是独立与其他的activity的。每一个activity作为Activity基类的一个子类来实现的。

一个应用程序可能仅由一个activity组成,也可能象刚才提到的文本消息应用程序一个,由数个activity组成。Activity是什么,以及有多少activity,当然依赖于应用程序及其设计。典型地,其中一个activity被标记为第一个,当应用程序被启动时,它应该被首先呈现出来。从一个activity迁移到另一个activity是通过当前activity启动下一个activity来完成的。

每一个activity都有一个默认的绘制窗口。通常,该窗口填满屏幕,但是它也可能比屏幕小并且浮动在其它窗口上面。一个activity还能利用另外的窗口 例如,一个位于activity中间的弹出对话框用于对用户做出响应,或者一个当用户选择一个屏幕上特定条目时带给用户重要信息的窗口。

窗口的可视内容由一个具有层次的视图所提供 从基类View继承来的对象。每一个视图控制一个窗口中特定的矩形空间。父视图容纳并组织其子视图的布局。叶子视图(在层次的最末端)在它们所控制的矩形中绘制并对作用于这一区域的用户动作做出响应。因此,视图是activity与用户的交互发生的地方。例如,一个视图可能会显示一个小图像,并且当用户轻击该图像时发起一个动作。Android有许多现成的视图可以使用,包括按钮、文本域、滚动条、菜单项、复选框,等等。

一个视图层次是由Activity.setContentView()方法布局到一个activity中的。内容视图(content view)是位于层次根部的View对象。

Services

一个service没有可视化的用户接口,而是运行在后台一个无限期限内。例如,当用户试图做其他事情时,一个service在后台播放音乐,或者它也可能在网络上提取数据,或做些计算并提供结果给需要它的activity。每一个service继承自Service基类。

一个最好的例证是一个媒体播放器从一个播放列表中播放歌曲。播放器应用程序可能有一到多个activity以允许用户来选择歌曲并开始播放。然而,音乐播放本身不能被一个activity处理,因为用户会期望音乐持续播放,甚至是在他们离开播放器并开始做其他事情时。要保持音乐继续播放,媒体播放器 activity可以开始一个service来在后台运行。然后系统将保持音乐播放服务持续运行,甚至在启动播放器的activity离开屏幕以后也会持续播放。

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

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

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

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

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

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

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

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

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

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

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

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

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

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