android 应用基础

android概括

android应用使用的是java语言,然后用android sdk工具编译代码,把代码和资源打成一个包,最终获得一个apk文件。一个apk就是一个应用并且是可以安装在android系统的设备上的。
在第一次安装到设备上,每个andorid应用都是在自己的沙盒里。
1.andorid系统是多用户的linux系统,每个应用都是一个用户。
2.默认的系统会分配给每个应用一个用户id。系统应在所有文件中会设置权限,所以只有分配用户id的应用才能访问它。
3.每个进程都在他自己虚拟机中,所以一个应用的代码是独立于其他的应用程序的。
4.每个应用默认是运行在自己的Linux进程中。在组件被执行时就会启动这个进程,然后在或经过很长时间或者是其他应用需要回收内存时关闭。
通过这种方式,androi系统实现了最小特权的原则。每个应用默认只访问自己的组件需要做的工作。这样不能访问系统没给权限的操作就创建了一个相对比较安全的系统。
但是,这里也有多个应用和其他的应用分享数据并且访问系统服务的方法:
1.不可能安排两个程序共享一个用户id,这种情况下他们是不能访问另外的文件的。为了节省资源,一个应用同一个id可以分配在同一个liunx进程中运行并分享同一个虚拟机。
2.一个应用可以提供权限,比如通讯录,短信管理,装载sd卡,相机,蓝牙等。所有的应用权限必须在在安装前填写完。


一个android应用的基本知识:

1.一个核心的构架部件定义你的应用。

2.声明组件和设备属性的清单文件。

3.和代码分开的资源文件。


应用组件

一个应用构架了这个android应用必要的模块。每个组件都可以通过系统进入你的应用。不是每个组件有真正的用户入口并相互依赖,但是每个组件都有存在的实体并且扮演着一个指定的角色,每个组件都是应用整体行为的一部分。

这里一工有四个不同类型的组件,每个组件提供一个明确的职责和生命周期。

activity:一个activity代码一个屏幕上的一个界面。比如,一个邮件应用里邮件的列表就是一个activity,显示一个邮件也是一个activity。虽然是多个activity一起组合成了一个邮件应用,但是每个activity都是独立,不同的应用可以启动任何的一个activity。

service:一个服务组件可以长时间的运行在后台或者执行远程的操作。一个服务不提供界面。比如一个在用户后台播放音乐的服务,或者他可以在不堵塞activity界面交互并从网络上获取数据。可以启动一个service也可以让太绑定当activity上这样可以和activity交互。

content provider:一个管理应用数据集合的内容提供者,你可以存储数据在一个文件系统中,一个SQLite,或者在网络上,任何的其他可持久化的你应用可以访问的数据。通过内容提供者,另外的应用可以查询或者修改数据(在内容提供者允许的情况下)。比如,android提供了联系人内容管理者,任何的应用只要有权限可以查询内容并写入一个个人的信息。

broadcast Receivers:一个广播接收器时响应系统范围里的广播通知的。许多广播是系统发布的。比如,一个发布屏幕上电量低的广播。一个应用可以创建一个广播,比如一个应用下载完数据并可以使用它。虽然广播接收器不显示在界面上,但是当你发送广播时可以创建一个状态提示去提醒用户。很多的情况下广播接收器只是当做一个通道并做很小量的工作。


激活组件

四个组件类型中(activity,service,broadcast receivers)可以通过一个Intent激活。在运行时,Intent可以激活任何一个组件无论是自己的应用还是其他应用。

一个Intent被分为一个显式和隐式,显示是激活某个指定的组件,隐式是激活某组特定的组件。

对于activity和service,一个Intent第一了一个动作去执行一些操作。比如传递一个Intent让activity去打开一个网页或者打开一个图片。在有些情况下在启动activity后会去接收一个结果,activity也会返回一个结果的Intent。

对于broadcast receivers就是简单的定义发布的广播(比如,一个指示设备低电量的广播,他就明确的指向一个动作的名称)。

对于content provider,不能被Intent激活。他一般是在ConentResolver里激活的。这个所谓的内容解析器的主要功能就是组件可以通过它执行事务,而不是直接通过Content Provider。Content Resolver是一个抽象层在内容提供者和组件请求之间。


怎么去激活每个组件:

1.启动activity,通过startActivity()或通过startActivityForResult()发送一个Intent;

2.启动service,通过startService()发送一个Intent或通过bindService()绑定一个Intent;

3.发送一个广播,可以通过sendBroadcast(),sendOrderedBroadcast(),或者sendStickyBroadcast()发送一个Intent;

4,你可以执行一个查询内容调用Content Resolver中query()


清单文件

在android系统启动任何一个组件时,你必须通过AndroidManifest.xml让系统知道你的组件是存在的。你必须在文件中描述所有的组件。

除了描述应用中的组件,还做接下来的几件事:

1.确定权限在你的应用中,像网络访问读取用户联系人。

2.描述应用使用的最小的API Level。

3.描述应用使用硬件和软件的特性,比如相机,蓝牙等。

4.描述应用相关联的api库,比如 google maps library。

注意:activity,service和content providers不在清单中声明系统是不能运行的,但是broadcast receivers可以在清单中声明也可以在代码中调用registerReceiver()方法注册。


声明组件的功能

激活一个组件,你可以使用显式的Intent启动activity,service和broadcast receivers,一个真正的Intent是在于它的需要操作的动作。你可以简单的描述一个你想要执行的动作类型并且允许系统在设备上寻找一个可以启动的组件然后启动它。假如有多个组件可以执行这个Intent,用户就可以选择其中一个使用。

系统通过在清单中过滤器这种方式定义组件响应一个Intent。

当你声明一个组件在你的应用清单里,你可以选择包含意图的过滤器来描述这些组件可以响应这个意图。你可以描述一个意图过滤器子组件中增加一个<intent-filter>元素。


声明应用请求

这里有个各种各样的android设备上使用并且不是所有的都会提供一下功能和能力。为了防止你的应用在安装到设备上时缺少功能,这个是一个很重要你清晰的定义一个配置文件。因为这个会描述你的应用设备和软件的需求在你的清单中。更多的信息和系统将不会去读取它,但是外部飞服务比如google play会去读取他们,当他们的设备搜索应用时会进行过滤。

比如,假设你的应用请求一个相机功能并且使用api在android2.1中才引进来,你可以声明这些需求在清单声明中。这个方式,设备不会有个相机功能并且android版本是低于2.1的不能安装你的应用在google play上。

但是你可以描述你的应用使用相机但是不使用它。在这种情况下, 你的应用必须执行去检查来决定是否这个设备有相机功能并且禁止一下特性你不可使用。

接下来是一些重要的设备属性在你设计和开发应用的是要好好考虑的。

1.屏幕大小和密度:为了分类设备屏幕类型,android定义了两种设备特性:屏幕大小(屏幕的物理尺寸)和屏幕的密度(在屏幕上像素的物理密度,或者叫每英寸的点数)。为了简化所有不同的屏幕配置,android系统概况了几种选择,是他们更加容易使用。
屏幕大小 small, normal, large和extra large
屏幕密度low density,medium density,high density和extra density。
默认的是你的应用是兼容屏幕和密度的,因为android系统使用适当的调整你的ui布局和图片资源。但是,你应该创建指定的布局为几个屏幕的尺寸并提供指定的图片为不同的密度。用选择布局资源,并且声明你的清单哪些屏幕你的应用是支持的用<support-screens>
2.输入配置
许多的设备提供不同的输入方式,比如物理键盘,滚轮,一个5键的导航,假如你的应用提供特别的硬件,你可以在清单中用<use-configuration>元素。但是这比较少见在一般应用中。
3.设备属性
有越来越多的硬件和软件可能存在或不存在一个设备上,比如相机,光感,蓝牙,opengl,或者高保真触屏。你可以不假设一个特定的功能可以使用在所有的android设备上,所以你需要声明任何一个你应用需要用到的属性<uses-feature>元素。
4.平台版本
不同的andorid设备经常运行不同的版本android平台,比如android1.6或者android 2.3。每个升级的版本经常会增加api是上个版本不可以用的。为了指定可用的api,每个平台指向一个API Level(比如,android 1.0是API Level 1,andorid 2.3是API Level 9)。假如使用api版本在1.0以后,你必须用<use-sdk>描述最小的API Level.

这些都很重要你描述你所有的应用所需要的,因为当你发布你的应用在google play上,商店会根据你的描述来过滤这些可用的设备,你的应用只会提供给可以使用的设备。


应用资源

一个应用程序,不仅仅只有代码,也需要分离在代码外的资源,比如图片,比如音乐,比如可视化的东西,比如,可以定义animaitonsmenus,styles,colors和activity的布局文件。使用这些资源使用容易修改应用各个方面的特征并且不会影响你的代码的情况下可以进行替换,这样也可以来优化你的应用的各个配置在不同的设备上。(比如不同语言,不同的屏幕大小)。

为了每个资源都包含在andorid的项目中,sdk编译工具会定义一个唯一的id,这个可以使用的引用资源在你的应用代码中或是从其他资源中定义的xml。比如应用中包含一个图片名字叫logo.png,你可以使用引用插入图片在你的界面中。

这个是很重要的部分提供资源和你的代码分离,这样可以提供可选的资源为不同的设备配置。比如,你定义的ui字符串。你可以转换不同的语言字符串,并且保证字符串都是在独立的文件中。然后是基于一个语言的修饰你可以使用资源的目录名(res/values-fr是表示法语)并且在语言设定后andorid系统会自动的适配语言到你的ui上。

android支持多个不同修饰在你的可选资源中。这限定一个短字符可以包含你的资源的目录为了设备使用。另外的一个例子是你需要为你的activity创建不同的布局,这个取决于设备屏幕的大小和方向。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值