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()

startService(), bindService()

sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

ContentResolver.query() 

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,这样能够被代码或其他资源索引到。

资源文件夹支持多种限定词来进行全球化、横竖屏等多场景的兼容。

(源自:http://developer.android.com/guide/components/fundamentals.html

Develop系列—API Guides,布布扣,bubuko.com

时间: 2024-08-11 05:43:38

Develop系列—API Guides的相关文章

Develop系列-API Guides-应用组件-Services-Bound Services

Bound Services CS架构,其中C是调用组件,S是Bound Services: C通过bindService来绑定,这个方法立即返回,没有返回值,C需要实现ServiceConnection里面的onServiceConnected和onServiceDisconnected接口. 多个C绑定同一个S时,S只调用一次onBind返回IBinder,后续来绑定S的C,直接得到同一个IBinder,onBind不再重复执行. 创建Bound Services 扩展Binder类:只在应

Develop系列-API Guides-简介3

系统权限 安全架构 app在独立进程沙盒中运行,互不影响.app静态定义所需要的权限,系统安装时提醒用户是否给app授权. 应用签名 所有应用必须用证书签名,证书由开发者管理,它们是开发者的唯一标识. 用户ID和文件访问 1.同样的shareUserId和签名,才能在同一个进程中共用一个用户ID 2.在创建新文件时,可以通过MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE标签来设置其他应用能否读写此文件 使用权限 默认的,app没有任何权限,需要在Androi

Develop系列-API Guides-应用组件-Services

Services Services:可在后台长时间运行,无UI界面. Started: Services通过其他组件调用startService启动,能在后台一直运行,即使启动它的组件已经销毁.一般这种服务执行特定的操作而且没有返回值,比如通过网络下载或上传一个文件,一旦操作结束,服务需要停止自己. Bound: Service通过其他组件调用bindService绑定,提供一个CS架构的接口允许其他组件与Service交互.发消息.获取返回值.甚至跨进程通信.bound service与绑定它

Develop系列-API Guides-应用组件-Activities-Tasks and Back Stack

Tasks and Back Stack 一个app一般包含多个activities,每个activity执行不同任务. Task是与用户交互执行一系列任务的activities集合,这些activities已打开顺序排列在一个栈堆中. 用户点击主页面的图标或者快捷方式,如果此应用从未被执行过,那么会创建一个新的task,主界面activity作为这个task的根activity,当根activity启动其他界面,一个新的activity会被压到task的栈顶并获取焦点.此时根activity仍

Develop系列-API Guides-应用组件-Activities

Activities 生命周期 本质上来说,activity A有三种状态: Resumed:A在最前面并且拥有用户焦点,这种状态一般也称为running Paused:activity B在最前面并且拥有用户焦点,但是A仍然可见,也就是说B要么是透明的,要么没有把后面的A完全覆盖.此状态的activity对象仍在内存,维持着所有状态和成员信息,并且仍附着window manager,有可能会系统销毁. Stopped:A被B完全覆盖,此状态的activity对象仍在内存,维持着所有状态和成员信

Develop系列-API Guides-应用组件-Intents and Intent Filters(1)

Intents 和 Intent Filters (Intent译为意图,让人比较费解,实际上解释为"消息"更加合理,干脆就不翻译了) Intent是能在app组件间传递的消息体,基本使用方式有如下三种: 启动activity startActivity:intent描述需要启动的activity和必须的数据 startActivityForResult:intent启动的activity结束后,会触发onActivityResult回调 启动服务 startService:inten

Develop系列-API Guides-应用组件-Activities-Loaders

Loaders 在activity或者fragment更加容易的异步加载数据,Loaders有如下特性: 所有activity和fragment都可以使用 异步加载数据 监控数据并分发数据更新结果 配置发生变化时,会自动重连上一次的数据游标,不需要重新查询. API汇总 Class/Interface Description LoaderManager 与activity和frament关联用于管理一个或多个Loader实例的抽象类,它最常见就是和CursorLoader结合使用. 每个acti

Develop系列-API Guides-简介2

设备兼容性 手机--平板--电视,Android需要广泛兼容.开发者需要灵活适配多种不同的屏幕. 何为兼容性? 设备兼容性:Android兼容,Android compatibility program && CTS app兼容性:app对于潜在的设备是兼容的 控制app兼容性 大部分情况下,你可以运行时禁用部分特性,或者为不同配置的设备提供适配资源. 如有必要,可以通过Google Play Store限制app在不支持设备上的安装: 设备特性 1.特性必须有才能用的app,可以用man

Develop系列-API Guides-应用组件-Services-AIDL

Android接口描述语言(AIDL) AIDL定义客户端和服务器端都遵守的接口,进行进程间通信. Note:AIDL使用场景:来自多个应用的客户端通过IPC访问服务,并且服务需要处理多线程的场景: 如果你没有来自不同客户端的并发场景,建议使用Binder接口:如果你需要处理IPC,但是没有多线程的场景,建议使用Messenger.(这两种用法在http://www.cnblogs.com/konger/p/3923518.html有介绍) AIDL接口调用是直接的函数调用方式,同进程和其他进程