Develop系列-API Guides-简介-应用基础
应用基础
app用Java语言编写,以apk为后缀。
apk运行在自身安全的沙盒中:
- Android是多用户Linux系统,每个app就是一个不同的用户
- 默认的,系统给每个app分配唯一的Linux用户ID,并设置访问权限
- 每个进程有自己的虚拟机VM
- 默认的,每个app运行在自己的Linux进程
android系统实行最小权限原则。
然后,有两种方式可以在不同app之间共享数据或者使用系统服务:
- 两个app共享相同的Linux用户ID,他们就能互相访问各自的文件,app必须是相同签名的
- app可以申请权限去访问终端数据,比如用户联系人,短信息,SD卡,相机,蓝牙等等,所有app权限都必须在安装时由用户授权。
app组件
Activities
呈现单屏UI界面
Services
长时间在后台运行,无界面
Content providers
管理共享的app数据集,存储方式包括文件系统、SQLite数据库、Web或者app能够访问的任意存储位置
Broadcast receivers
广播响应全系统的广播通知,无界面,可以创建状态栏的通知
启动组件
Intent
startActivity()
, startActivityForResult()
sendBroadcast()
, sendOrderedBroadcast()
, sendStickyBroadcast()
Manifest文件
定义组件
activity, service, content provider 必须是在manifest里面静态注册,而broadcast可以动态注册
定义组件能力
显式指定组件类名来启动,或者隐式地通过intent filter来定义
定义app依赖项
Android终端众多,为了保证app能够在任意终端运行,需要定义app依赖运行的软硬件条件,比如,你的app需要照相功能并且运行在Android2.1(API LEVEL 7)版本之上,你需要定义如下依赖项:
<manifest ... > <uses-feature android:name="android.hardware.camera.any" android:required="true" /> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" /> ... </manifest>
这样Google Play检测到当前设备没有照相功能或者Android版本低于2.1就不能安装你的应用。
如果你的app要用到照相功能,但不是必须使用,那可以将android:required设置为false,然后在运行时动态检查设备是否具有照相功能,来兼容不同的设备。
app资源
任何一个非代码的资源文件,SDK编译工具会定义一个唯一的整型ID,这样能够被代码或其他资源索引到。
资源文件夹支持多种限定词来进行全球化、横竖屏等多场景的兼容。