安卓翻译——app组件
安卓应用程序是用Java编程语言所写的。安卓SDK工具将代码和数据还有资源文件编译到一个后缀为.apk的安卓包中。一个单独的.apk文件中的所有代码被认为是是一个应用,并且是安卓设备上安卓文件所使用的文件。
一旦安装到设备上,每个安卓应用生存在自己的安卓沙盒中:
安卓设备是一个多用户Linux系统,其中的每个应用时一个不同的用户。
默认情况下,系统会给每个应用设置一个独一无二的Linux用户ID(这个ID仅仅被系统所使用并且对应用保密)。系统给在一个应用中的所有文件设置了权限,因此只有签名过的应用的User ID才有权限使用这些资源。
每个进程都有它自己的虚拟机(VM),一一个应用的代码的运行是与其它的应用隔离开来的。
默认情况下,每个应用运行在它自己的Linux进程中。当一个应用的任何组件需要被执行的时候,安卓系统会开启一个进程,然后当它不在需要的时候或者系统需要为其它应用回复内存时关闭一个进程。
安卓系统用这种方式来执行最近优先原则。每个应用默认仅有权接触到需要做自己工作的组件。这中应用不能接触到系统没有给它权限的方式创造了一个安全的环境。
然而,对一个应用来说,也有几种方式与其它应用来共享数据和获得系统服务:
对两个应用来说是有可能通过共享同一个Linux user ID 来使他们能够获得互相之间的文件资源。通过保存系统资源,有着相同 user ID的应用也能够安排在同一个Linux进程中,共享同一个虚拟机(这些应用也必须有相同的签名证书)。
一个应用也能够请求获得设备数据的权限,例如:用户的通讯录,SMS信息,大数据存储(SD卡),照相机,蓝牙,等等。所有的应用权限必须在用户安装的时候限定。
那些包含了一个安卓应用是如何生存与在系统中的基本知识。这个文档的其余部分向你介绍:
定义自己应用的核心框架。
用来声明组件和为应用请求设备属性的manifest文件。
资源与应用程序的代码相分离,允许你的应用可以对不同的设备配置来优雅地为最优化它的行为。
应用组件
应用组件是一个安卓应用的核心组件。每个组件是系统能够进入你的应用的不同切入点。对用户来说,不是所有的组件都是真实的入口,一些是相互依存的,但是每个组件作为它自己的实体生存并且扮演这特殊的角色——每一个都是独一无二的构件来帮助你定义应用的所有行为。
这儿有四种不同类型的应用组件。每种类型都有特定的目的,还有着不同的来定义组件创建和销毁的生命周期。
下面是四种组件的基本简介:
Activities
一个activity代表了一个用户界面的单独屏幕。例如,一个邮件应用可能有一个activity显示新邮件的列表,另外一个邮件来写一个邮件,再一个activity来读取一个邮件。尽管在一个邮件的用户体验中所有的activities紧密地相互合作,但是他们之间是相互独立存在的。同样地,一个不同的应用能启动这些activities中的任何一个(如果这些邮件应用允许的话)。例如,一个照相机应用能够启动在邮件应用中的activity来写一封新有劲啊,让用户来分享图片。
一个activity是作为Activity的子类来实现的,你能够在Activities中了解更多关于它的知识。
Services
服务是运行于后台来执行那些需要长时间运行的操作或者来为之前的进程来执行工作的一种组件。服务是不提供用户界面的。例如,一个service可能后台播放音乐,当用户在不同的应用中时,或者它可能在不阻塞有着用户界面的activity情况下来通过网络来抓取数据。另外的组件,例如 activity,能够启动一个service并且让他运行或者绑定它到自身为了与之交互。
Content providers
内容提供者管理共享的应用数据。你能够存储数据在文件系统中,一个SQLite数据库,在网络上,或者任何其他的你的应用可以解除的永久存储位置。通过内容提供者,其它的应用能够查询或者甚至来修改数据(如果内容提供者允许的话)。例如,安卓系统提供了一个内容提供者来管理用户的通讯录信息。同样地,任何有着正确权限的应用能够查询内容提供者的部分来对一个特定的人读取或者写入信息。
内容提供者对读写对应用私有的和非共享的数据来说仍然是有效的。例如,Note Pad 例子中的应用使用内容提供者来存储便签。
Broadcast receivers
广播接收者是一个对全系统广播公告回应的组件。许多广播起源于系统—例如,一起广播宣布屏幕关闭,电池的电量低,或者一个图片被截取。应用也能够发起广播—例如,让其他的应用知道一些数据被下载到设备上和能够被他们所使用。尽管广播接受者不呈现一个用户界面,但是它们可能创建一个状态栏通知来警示用户当一个广播发生的时候。然而,广播接受者对其它的应用来说仅仅是一个门户,它是被用来做非常少量的工作。举例来说,它可能初始化一个service来执行一些基于时间的工作。
安卓系统的一个独一无二的设计是任何一个应用能都启动其他应用的组件。例如,如果你想让用户用设备相机来截取一张图片,这儿可能有另外的应用来做这件事情,然后你的应用来使用它,这样就代替了开发一个捕获图片的activity。你不需要合并甚至链接与相机应用相关的代码。想法,你能很简单地启动相机的activity来捕获图片。当完成的时候,图片甚至返回到你的应用,因此你能够使用它。对用户来说,这好像相机确实是你应用中的一部分。
当系统启动一个组件的时候,它会为那个应用启动一个进程和实例化那个组件所需要的类。例如,如果你的应用启动相机应用的activity来捕获图片,这个activity运行在属于相机应用的进程中,不是你应用的进程中。因此,不像在大部分其他系统中的应用一样,安卓应用没有一个单独的实例入口(这儿没有main()函数,例如)。
因为安卓系统运行在分离开的进程中来运行应用,进程的文件权限对其他应用来说也是严格的,你的应用不能直接的激活其他应用中的组件。然而,安卓系统能够做到。因此,为了激活其他应用中的组件,你必须给系统传递一个消息来表明你的意图去启动特定的组件。系统能给为你激活组件。
激活组件
四种组件类型中的三种——activities,services,和broadcast receivers——是被叫做intent的异步信息所激活。intents将在运行时的组件相互捆绑到一起(你可以讲它们想象成一个需要从其他组件行为的信息载体),不论这个组件是属于你的应用还是其它的应用。
一个intent是被创建成一个Intent对象,并定义一个信息来激活一个特定的组件或者一种特定类型的组件——一个intent可以是明确的或者模糊的,分开地。
对activities和services来说,一个intent定义了需要执行的活动(例如,使查看或者发送一些东西),也可能指定了URI的数据来执行(在一些组件被执行需要知道的事情中)。例如,一个intent可能传输为一个activity一个请求来展示一个图片或者打开一个web页面。在一些情况中,你能够启动一个activity来接受结果,在一种情况下,activity也能在一个intent中返回结果(例如,你能发出一个intent来让用户选择一个个人通讯录和让这个选择返回给你——返回的intent包括一个只想被选择的通讯录的URI)。
对广播接受者来说,intent简单地定义了被广播的公告(例如,一个指示设备电量低的广播进京包括了一个已知的知识电量低的字符串行为)。
The Manifest File
在安卓系统能够启动一个应用组件之前,系统必须通过读取应用的AndroidManifest.xml 文件来确定这个组件的存在。你的应用必须在应用工程根目录的manif 文件中来声明它的所有组件。
除了声明应用组件之外,manifest文件还做了一些其它的事情,例如:
确认应用需要的一切用户权限,例如网络连接,或者读取用户通讯录的权限。
声明应用所需要的最小API Level,基于应用所使用的APIs。
声明应用需要得或者请求的硬件和软件,例如,相机,蓝牙服务,或者多点触控屏幕。
应用所需要链接的API库(除了安卓框架的APIs),例如Google Maps 库。
更多。
声明组件
manifest的主要任务是告知系统关于应用的组件。例如,一个manifest文件能像下面这样声明一个activity:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... ><application android:icon="@drawable/app_icon.png" ... ><activity android:name="com.example.project.ExampleActivity"android:label="@string/example_label" ... ></activity>...</application>
</manifest>
在<application>元素中,android:icon 属性指向定义应用icon的资源。
在<activity>元素中,android:name属性指明了Activity子类的类名全称,android:label属性指定了一个用于activity可见的用户标签的字符串。
你必须声明所有应用组件以这种方式:
<activity>
elements for activities<service>
elements for services<receiver>
elements for broadcast receivers<provider>
elements for content providers
包含在源文件中但是没有在manifest文件中声明的activities,services,和content providers对系统是不可见的,通常情况下也是不可运行的。然而,broadcast receivers 既能在manifest中声明或者在代码中动态创建(想BroadcastReceiver 对象)和通过调用registerReceiver()来注册到系统中。
声明应用要求
应用资源
安卓翻译——app组件相关推荐
- 语音识别翻译app下载-语音识别翻译 安卓版v1.2.9-PC6安卓网
语音识别翻译app是一款能够精准的识别并翻译语音的软件.语音识别翻译软件相比起文字识别或者拍照更加方便和简单,只需对着语音识别翻译app说话就能翻译! 软件介绍 语音识别翻译app是一款主打语音翻译的 ...
- 安卓版App开发心得
为什么80%的码农都做不了架构师?>>> 从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又 ...
- android英语学习app实战,Android高端的翻译APP,英语学习APP制作
Android高端的翻译APP,英语学习APP制作,学生作品 采用金山词霸的api接口进行制作 可以学单词 背单词 单词查询 单词播报 英文名句语音朗读等 界面 简洁明了 数据库仅仅使用了本地的Gre ...
- sketch放入app组件_使用Sketch App设计CSS网格
sketch放入app组件 首先定义您的网格 (Start by defining your grid) Sketch has 2 built-in layout features - Layout ...
- sketch放入app组件_Sketch App 3中的基本图像编辑入门
sketch放入app组件 I've been talking a lot about Sketch App lately. I never forget to mention that it's a ...
- vue中文翻译拼音组件_Vue组件可简化文本的翻译方式:通过内联翻译
vue中文翻译拼音组件 @ alidrus / vue-simple-inline-translation (@alidrus/vue-simple-inline-translation) A Vue ...
- 集精准翻译与学习助手于一身 搜狗翻译APP实现重磅升级
搜狗搜索正在通过翻译将中文世界与全世界紧密连接.凭借领先的人工智能技术,搜狗搜索于今年6月发布搜狗翻译APP,集文本.语音.对话.拍照翻译四大功能于一体,给用户带来多种场景下"秒翻秒懂&qu ...
- 安卓自动化APP——Tasker
文章目录 前言 一.软件介绍 软件特色 使用逻辑 注意事项 二.使用教程 配置文件(介绍几个难以理解的,下同) 任务 场景 备份功能 写在最后 前言 本文介绍另一款安卓手机自动化软件,名为Tasker ...
- 安卓应用——APP首页
安卓应用--APP首页 代码仓库地址 一.实验目标 做一个APP首页,包括 顶部图片.顶部菜单栏.中部消息模块.底部Tab按钮.学习 ScrollView.RelativeLayout 组件,以及组件 ...
最新文章
- 简单介绍vue获取token实现token登录的示例代码
- php无法加载dll插件,php无法加载动态库怎么办
- 假设写一段代码引导PC开机这段代码是 ? Here is a tiny quot;OSquot; :-D
- C# 关闭正在执行的文件
- Spring+MyBatis 多数据源配置和切换
- Android:ListView常见错位之CheckBox错位
- 共享SQL语句减少硬解析
- MySQL使用on duplicate key update时导致主键不连续自增
- java 代码同步_Java同步代码块 转
- 如何用python生成可执行程序必须经过_python怎么生成可执行文件
- WorkerMan 入门学习之(三)基础教程-Timer类的使用
- CCNA学习要点,希望能对初学者有帮助
- linux可上网limbo镜像,limbo模拟器win10精简版
- xbox win10测试软件,UWP APP可通过Win10商店直接安装至XboxOne主机
- solaris 系统信息查看
- 热力地图高德_高德地图热力图和设备监测
- 路由器和交换机的基本配置
- 问题1362:小鑫鑫的平均分
- B站JavaScript从入门到精通Blue石川老师视频部分代码_运动升级_链式运动_土豆网
- C++ RPG创建游戏角色
热门文章
- 今天不抠图,Python实现一键换底片!想换什么换什么(附源码)
- 高考监考引入人脸识别黑科技?更多高新监控技术为高考保驾护航!
- html中css设置文本对齐,css文本对齐使用哪个属性
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
- BFS 典型的迷宫问题
- 手机APP常见功能点测试(入门级)
- JAVA—小鑫の日常系列故事(五)——卡片游戏
- 学习笔记必备软件:OneNote+ Mindmaster完美搭配使用
- Java实现下载文件到本地
- 迪米特原则(最少知道原则)-快速理解