位置: 编程技术 - 正文

Android之应用开发基础(安卓应用 开发)

编辑:rootadmin
Android应用开发基础英文地址: 应用组件1.1 Activating组件2 清单文件2.1 声明组件2.2 申明组件的能力2.3 声明应用必须需要的设备功能3 应用资源

推荐整理分享Android之应用开发基础(安卓应用 开发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓应用 开发,android 打开app,android应用开发教程,android应用开发教程,android 应用程序开发,android应用开发教程,android应用开发从入门到精通,《android应用开发揭秘》,内容如对您有帮助,希望把文章链接给更多的朋友!

Android 应用是基于Java程序语言的。Android SDK 工具编译你的代码以及任何数据和资源文件到一个APK(全称“an Android package”),那是一个.apk后缀的归档文件。一个APK 文件包含Android应用所需的所有内容 ,apk文件是Android设备的应用程序的安装文件。

一旦安装在设备上,每个Android应用程序都存在于它自己的安全沙箱:

操作系统是一个多用户Linux系统,系统中的每个应用程序是一个不同的用户。默认情况下,系统分配给每个应用程序的一个唯一的Linux用户ID(ID是系统唯一并且系统也不知道这个ID属于这个应用)。系统给一个应用程序中的所有文件设置权限,只有与用户ID相同的应用程序可以访问它们。每个进程都有自己的虚拟机(VM),所以应用程序的代码运行在与其他应用程序相隔离的进程中。默认情况下,每个应用程序运行在它自己的Linux进程中。Android应用启动过程中,任何应用程序的组件都需要被执行。应用程序长时间没有响应或者系统需要收回内存的时候,应用程序会被关闭。

这样,Android系统实现了最细粒度的权限原则。在默认情况下,每个应用程序只能使用自己能访问的组件来做它需要做的工作。这将创建一个非常安全的环境,应用程序不能访问它没有权限的系统部分。

然而,应用程序与其他应用程序之间以及一个应用程序与系统服务之间,可以有这样的数据共享方式:

让两个应用程序共享相同的Linux用户ID,这是可能的,在这种情况下,他们能够访问彼此的文件。为了节约系统资源,具有相同用户ID的应用程序也可以运行在相同的Linux进程共享相同的虚拟机(应用程序也必须使用相同的证书签名)。一个应用程序可以请求对系统数据的访问权限,如用户的联系人,短信,可插拔的存储设备(SD卡),摄像头,蓝牙,等等。所有的应用程序权限必须由用户在安装时授予,也就是在清单文件AndroidManifest.xml上要列举该应用需要哪些权限。

本文档主要介绍一个Android应用程序的基础知识。文档其他部分会介绍:

定义你的应用程序中的核心框架组件。在你的应用程序清单文件中声明组件和所需设备功能。资源是独立于应用程序代码的,这能让你的程序为各种设备配置资源进行优化。1 应用组件

应用程序组件是一个Android应用程序的基本构造块。每个组件都是一个不同的点,通过这个点可以从系统进入你的应用程序。不是所有的组件都是一个实际的切入点,但每一个存在的实体,扮演着特定的角色,每一个都是独特的构建块,能让你规定你的应用程序的整体行为。

有四种不同类型的应用程序组件。每个类型都有不同的目的,有不同的生命周期,有不同的创建和销毁规则。

这里有四种类型的应用程序组件:

Activities一个Activity代表了一个用户界面。例如,一个电子邮件应用程序可能有一个Activity显示新邮件列表,一个Activity撰写邮件,一个Activity来读取邮件。虽然Activity一起形成了电子邮件应用程序,一个完整的用户界面,但每一个Activity都是独立的。因此,不同的应用程序可以启动这些Activity的任何一个(如果邮件应用程序允许的话)。例如,一个摄像头的应用程序为了让用户分享图片,可以调用电子邮件应用程序中的编写新邮件的Activity。

每一个Activity都是实现 Activity 的子类,你可以学习更多关于Activities的开发指南。

ServicesService组件运行在后台执行长时间运行的操作或执行远程操作。Service不提供用户界面。例如,一个Service可以在后台播放音乐,当用户切换不同的应用程序时,也可以从网络上获取数据,而不阻塞用户界面和活动。另一个组件,如Activity,可以启动Service,并让它运行或绑定到它,与它进行交互。

每一个Service都是实现 Service 的子类,你可以学习更多关于Services的开发指南。

Content ProvidersContentProvider管理应用程序的共享数据集。你可以将数据存储在文件系统中,一个SQLite数据库上,互联网上,或任何其他应用程序可以访问持久存储的位置。通过ContentProvider,其他应用程序可以查询或修改数据(如果ContentProvider允许)。例如,Android系统提供一个ContentProvider管理用户的联系人信息。因此,任何拥有适当权限的应用程序可以查询ContentProvider的某一部分(如 ContactsContract.Data)来读取和写入一个特定的联系人信息。

ContentProvider也可用于读取和写入你自己应用程序私有而不是共享的数据。例如,记事本示例应用程序使用ContentProvider保存笔记。

每一个ContentProvider都是实现 ContentProvider 的子类,你可以学习更多关于 Content Providers 的开发指南。

Broadcast ReceiversBroadcastReceivers是一个响应系统广播通告的组件。许多广播起源于系统,例如,广播通知屏幕已经关闭,电池低,或图片拍摄。应用程序也可以进行广播,比如,让其他应用程序知道某些数据已经下载到设备,其他应用可以开始使用。虽然BroadcastReceivers不显示用户界面,但他们可以创建状态栏通知用来提醒用户一个广播事件的发生。更常见的是,BroadcastReceivers是一个“入口式”的进入其他组件,只做一点点工作。例如,它可能会启动一个服务来执行基于事件的一些工作。

每一个BroadcastReceivers都是实现BroadcastReceiver的子类,每个广播作为一个Intent 对象传递的实现。更多信息参见BroadcastReceiver类。

Android系统的一个独特的方面是任何应用程序可以启动另一个应用程序的组件。例如,如果你想让用户用照相机拍一张照片,可能有另一个应用程序需要使用它,代替应用程序自己开发一个Activity用来拍摄照片。你不需要包含或者连接到相机的应用程序代码。相反,你可以简单的启动一个Activity,在相机拍摄照片的活动完成时可以获得照片,照片会返回到你的应用程序,所以你可以使用它。对用户来说,相机就好像是你的应用程序的一部分。

当系统启动一个组件,它会首先启动应用进程(如果它不是已经在运行)和实例化该组件所需要的类。例如,如果你的应用程序启动相机应用程序拍摄照片的Activity,这些Activity是属于摄像头应用程序的程序,而不是在你的应用程序的程序。因此,不像很多其他系统上的应用程序,Android应用程序没有一个单一的入口点(没有main()函数)。

因为系统运行每个应用程序在一个单独的进程,并限制其他应用程序访问该应用程序的文件,你的应用程序不能直接激活另一个应用程序的组件。不过在Android系统中,如果你的应用程序要激活另一个应用程序的组件,你必须向系统发送一条消息,指定你的Intent来启动某个组件,然后系统为你激活那个应用程序的组件。

1.1 Activating 组件

三四种类型的组件如Activity,Service,和BroadcastReceivers是由一个叫做Intent的异步消息激活。在运行时,Intent能把相互独立的组件联结在一起(你可以把它们作为使者,请求一个动作从其他组件),不用管这个被联结的组件是属于你的应用程序还是另一个应用程序。

一个Intent是一个创建了的 Intent 对象,它定义了一个消息来启动某个组件,Intent启动组件的方式可以是显式或隐式的。

关于Activity和Service,一个Intent定义要执行的操作(例如,“展示”或“发送”东西),可以指定操作数据的URI(将要启动的组件在其他事情上也许需要知道)。例如,一个Intent也许会用一个Activity来显示图像或请求打开一个网页。在某些情况下,您可以启动一个Activity来接受结果,在这种情况下,这个Activity也返回这个Intent返回的结果(例如,你可以发起一个Intent,让用户选择一个联系人并返回给你,这个返回的Intent则包括一个URI指向选定的联系人)。

关于BroadcastReceivers,Intent只定义了通知广播(例如,广播指示设备电池电量低时只包括一个已知的行为字符串表示“电池电量低”)。

其他的组件类型,ContentProvider,它没有激活的Intent。相反,它被激活时,有针对性的从一个ContentResolver发出请求。ContentResolver处理所有直接事务与ContentProvider,使组件不需要执行事务和ContentProvider,而是调用ContentResolver对象的方法。这就留下一个内容提供者和组件请求信息之间的抽象(安全)层。

这是分别激活每种组件的方法:

你可以启动一个Activity(或给新的事情让它做)通过一个Intent来startActivity()或者startActivityForResult() (当你想要Activity返回结果)。你可以启动一个服务(或给予一个正在运行的服务新的指示)通过传递一个Intent来startService()。或者你可以绑定到服务通过传递一个Intent来 bindService()。你可以通过传递一个Intent去使用方法 sendBroadcast(),sendOrderedBroadcast(), or sendStickyBroadcast()发起广播。你可以使用 ContentResolver的 query() 去查询ContentProvider提供的数据查询。

Activities, Services,BroadcastReceiver 和 Content Providers.关于使用Intent的更多信息,请参见 Intents 和 Intent Filters 文档。关于激活特定组件的更多信息也被提供在以下文档: Activities, Services,BroadcastReceiver 和 Content Providers。

2 清单文件Android之应用开发基础(安卓应用 开发)

在Android系统启动一个应用程序组件之前,系统必须通过阅读程序的AndroidManifest.xml文件知道组件的存在。你的应用程序必须在这个文件中声明的所有组件,它必须在应用程序项目的根目录。

清单除了声明应用程序的组件,还做一些其他的事情,如:

向用户标明该应用需要哪些权限,如连接互联网和访问用户的通讯录。声明应用程序所需的最低API版本,基于哪个API版本的应用程序可以使用。声明需要使用设备中软硬件的哪些功能,如照相机,蓝牙服务,或者是多点触控屏幕。应用程序需要链接哪些API库(除了Android框架API之外),如 Google Maps 库。其他2.1 声明组件

清单的首要任务是告诉系统应用程序中有哪些组件。例如,清单文件可以声明一个Activity,如下:

在 <application> 元素中,这个 android:icon 属性是一个标识应用程序的资源图标。

在 <activity> 元素中, android:name 属性指定这个Activity的类名,和 android:label 属性指定一个字符串作为Activity的用户可见的标签。

你必须用这种方式声明应用程序中用到的所有组件:

<activity> 元素用来声明Activity<service> 元素用来声明Service<receiver> 元素用来声明BroadcastReceiver<provider> 元素用来声明ContentProvider

Activity,Service和ContentProvider包括在你的源代码中,但如果你不声明在清单上,系统是看不到这些组件的,因此,应用程序也就不能运行。然而,BroadcastReceiver既可以在清单文件中定义也可以通过代码动态创建(如BroadcastReceiver对象)和注册的系统调用 registerReceiver()。

更多关于如何构建你的应用程序清单文件,查看 AndroidManifest.xml 文档。

2.2 申明组件的能力

如上所述,在 Activating组件 中,你可以用一个Intent来启动Activity,Service和BroadcastRecaiver。你可以使用显式地指定目标组件(使用组件类的名称)的Intent。然而,Intent真正牛&#;的地方在于隐式的Intent。一个隐式Intent简单描叙动作类型并执行(并且你可以执行任意你想要的动作),隐式的Intent允许系统在设备上查找相匹配的组件并启动它。如果匹配到多个组件可以执行Intent所描述的动作,那么就会让用户选择使用哪一个。

这种系统能识别可响应Intent的组件,是通过比较Intent在其他应用程序的清单文件提供的Intent过滤器来获得的。

当你声明一个Activity在你的应用程序清单中,你可以包含Intent过滤器来申明Activity的能力,所以它可以响应来自其他应用程序的Intent。你可以通过为组件添加一个 <intent-filter>元素,作为组件声明元素的子元素,用来定义一个Intent过滤器。

例如,如果你有一个在写新邮件的Activity需要调用一个电子邮件应用程序,你可以定义一个Intent过滤器来响应“发送”的Intent(为了发送新邮件)像这样:

然后,如果另一个应用程序创建 ACTION_SEND Intent并且通过它 startActivity(),那么系统可以启动你的Activity,用户可以起草和发送电子邮件。

更多关于创造Intent过滤器,请参考 Intents and Intent Filters 文档。

2.3 申明应用必须需要的设备功能

有各种各样的机器设备,他们不能提供所有功能和能力。为了防止你的应用程序被安装在一个“缺少你必须需要的功能”的设备上,重要步骤是你必须在清单文件中明确定义一些配置来表明哪些类型的设备才能支持你应用。大多数的这些声明仅仅只是信息,系统不读它们,但外部服务如Google Play(谷歌应用商店)在排序和过滤用户搜索时,会在他们的设备上阅读应用程序的这些申明。

例如,如果你的应用需要一个摄像头和使用Android2.1的API(API Level 7),你应该在你的清单文件中声明这些要求这样:

现在,没有一个相机和一个Android版本低于2.1的设备无法从Google Play(谷歌应用商店)安装你的应用程序。

然而,你也可以声明你的应用程序使用相机,但不是必须需要它。在这种情况下,你的应用程序必须设置需要的属性 required 为 "false" ,并在运行时设备是否有一个摄像头和禁用任何相机的时候适当的检查。

更多的信息关于如何管理应用程序在不同设备的兼容性请参考Device Compatibility 文档。

3 应用资源

一个Android应用程序不仅仅是代码组成的,它需要与源代码分离的资源,如图像,音频文件,以及任何与该应用程序的视觉呈现。例如,你应该定义动画,菜单,款式,颜色,以及用户界面的布局XML文件。使用应用程序资源,可以很容易地更新你的应用程序的各种特性,而无需修改代码,通过提供替代资源集使您可以为不同的设备配置优化你的应用程序(如不同的语言和屏幕大小)。

对于你Android项目中的每一个资源,SDK构建工具都会自动为这个资源定义一个唯一的ID,你可以在你的应用程序代码或XML文件中,使用资源ID去引用你定义的资源。例如,如果你的应用程序包含一个名为 logo.png 的图片文件(保存在 res/drawable/ 目录),SDK工具生成一个名为 R.drawable.logo资源ID,您可以引用图像插入你的用户界面。

一个提供资源从源代码中分离的最重要的方面是你为不同的设备配置提供替代资源的能力。例如,通过在XML中定义UI字符串,你可以把字符串翻译成其他语言并保存在不同的字符串文件中。然后,基于一个“language qualifier”你可以追加资源目录的名称(例如 res/values-fr/ 表示法国字符串&#;)用来配置不同的用户语言,Android系统会应用合适的语言字符串UI。

Android系统可以支持很多不同的资源限定符。限定符是一个短字符串,包含你的资源名称和文件夹名称,在有序的定义配置下,设备会选择使用某一个资源。另一个例子,你应该经常为你的Activity创建不同的布局,根据设备的屏幕方向和大小。例如,当设备屏幕是纵向的(高),你可能会想要一个有按钮的布局是垂直的,但当屏幕是横向的(宽),按钮应水平对齐。根据方向改变布局,你可以定义两个不同的布局和应用适当的限定词在布局的目录名。然后,系统自动使用适当的布局会取决于当前设备的方向。

更多关于不同种类的资源,你可以在你的应用程序以及如何为不同的设备配置,创造替代资源,请阅读 Providing Resources。

继续阅读:Intents and Intent Filters有关如何使用 IntentAPI激活应用程序的组件,如活动和服务,以及如何使你的应用程序的组件可用于其他应用程序。Activities有关如何创建Activity类的一个实例,并提供一个用户界面应用程序的不同的屏幕。Providing Resources关于Android应用程序的结构,将资源从应用程序代码中的信息,包括你可以为特定的设备配置提供替代资源。

ActivityManagerService(四) 文章出处:

Android实战简易教程-第十四枪(介绍SwipeMenuListView-简单实现类似QQ的滑动删除效果) 1.实现布局文件main.xmlRelativeLayoutxmlns:android=

android中dip、px相互换算 dip与px的区别/***dip转px*@paramcontext*@paramdipValue*@return*/publicstaticintdip2px(Contextcontext,floatdipValue){finalfloatscale=context.getResources().getDisplayMetrics().density;return(int)(d

标签: 安卓应用 开发

本文链接地址:https://www.jiuchutong.com/biancheng/387520.html 转载请保留说明!

上一篇:Android中文API——DatePicker&TimePicker(android的中文)

下一篇:ActivityManagerService(四)

  • 转让金融商品需要缴纳增值税吗
  • 收到商业承兑汇票到期付款通知单,据此登记相关账簿
  • 建筑企业印花税的计税依据
  • 一般纳税人结转增值税的账务处理
  • 个税两种申报方式哪种好
  • 餐饮业申请发票
  • 即征即退进项税额为哪些
  • 税控维护费抵减增值税报表怎么填
  • 为什么生产车间地板是绿色的
  • 为企业担保
  • 税法关于发票丢失的
  • 个人生产所得税计算
  • pos机刷卡的银行有哪些
  • 车间停产期间设施有哪些
  • 客户可以把现金存入对公户吗
  • 特定行业如何界定
  • 农民专业合作社属于什么企业类型
  • 金融企业准备金计提管理办法最新
  • 滞纳金入什么会计科目
  • 农产品增值税核定扣除管理建议
  • 进项票认证超了怎么处理
  • 一般企业财务报表格式2019选是还是否
  • 联想电脑bios启动项设置方法
  • windows10如何卸载edge
  • 什么情况下需要承担法律责任
  • 新版edge浏览器兼容性视图怎么设置
  • win10系统还原了怎么恢复
  • 资本公积是什么会计要素
  • 暂估入库材料分录
  • php网站实例
  • cocos creator脚本开发指南
  • vericut9.0环境变量
  • 融资购入的固定资产如何记账
  • h5移动端网页设计
  • 发票待开是什么意思?
  • 长期股权投资印花税计入什么科目
  • 退货可以开红字发票吗
  • 企业所得税品目应纳税所得额未申报
  • mysql复制一条记录
  • mongodb exception: $concat only supports strings, not NumberInt32解决办法
  • 企业出租的存货包括
  • 长期待摊费用最低摊销年限
  • 增值税无票收入税率变了
  • 企业开户行信息是什么意思
  • 小规模第一次申报流程
  • 以前年度无形资产摊销
  • 支付给法律顾问怎么做账
  • 提供维修业务的税率是多少
  • 商品流通环节包括
  • 现金解款单的会计分录
  • 安装费用怎么做分录
  • 自产产品对外捐赠确认收入吗
  • 事业单位哪些收入要上交国库
  • 银行收费错误当天能退吗
  • 企业实收资本的用途
  • 销项税红字发票如何做账
  • mysim和innodb
  • win7登录密码怎么改
  • centos8 固态硬盘
  • 怎么在centos中创建一个文件
  • incredr
  • g++.exe error
  • mac电脑卡死按哪三个键
  • win8自动进入桌面
  • linux ids
  • win10系统本地用户和组怎么添加
  • WIN10系统打开IE浏览器断网
  • 函数里面声明函数
  • jquery 属性
  • perl判断字符串相等
  • babel es6转es5原理
  • 解析几何
  • shell循环遍历目录
  • android studio downloading
  • unity3d相机设置视角
  • 每天一篇日记100字
  • linux装python环境
  • python 基础 教程
  • 烟叶的增值税税率9
  • 刚出生的宝宝身长多少正常
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设