Android应用基础知识

应用基础知识

  • Android操作系统是一种多用户Linux系统,其中的每个Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户;
  • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件;
  • 每个进程都具有自己的虚拟机 (VM),因此应用代码是在与其他应用隔离的环境中运行;
  • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 会在需要执行任何应用组件时启动该进程,然后在不再需要该进程或系统必须为其他应用恢复内存时关闭该进程。

共享数据和访问系统服务

  • 可以安排两个应用共享同一 Linux 用户 ID,在这种情况下,它们能够相互访问彼此的文件。 为了节省系统资源,可以安排具有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM(应用还必须使用相同的证书签署)。
  • 应用可以请求访问设备数据(如用户的联系人、短信、可装载存储装置 [SD 卡]、相机、蓝牙等)的权限。

应用组件

  • Activity 标识具有用户界面的单一屏幕
  • Service 一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业,不提供用户界面,不会阻断Acitivity与用户的交互
  • ContentProvider 管理一组共享的应用数据,其他应用可以通过ContentProvider对数据进行读写操作
  • BroadcastReceiver 响应系统范围广播通知的组件,不会显示用户界面,可以创建通知栏通知。更常见的用户只是作为通向其他组件的“通道”。
  • 任何应用都可以启动其他应用的组件
  • Android应用没有单一的入口点(没有main函数)
  • 除了ContentProvider之外的三大组件通过Intent启动,ContentProvider是在成为ContentResolver的请求目标时启动

Manifest

  • 四大组件只有BroadcastReceiver可以无需注册而动态创建
  • Manifest可以描述托管应用组件的进程
  • 只有<manifest>和<application>元素是必须的,它们必须有且只有一个;而且<application>必须是<manifest>元素内最后一个元
  • 显式命名目标组件的intent将直接激活该组件,因此这种情况下的目标组件的<intent-filter>不起作用
  • <permission>标签是声明他人调用本应用所需的权限,<uses-permission>是本应用运行需要向外部请求的权限

应用资源

  • 资源应该“外部化”——将图片和代码中的字符串放到特定的资源目录,方便系统根据不同的设备配置和语言环境选择正确的资源
  • 切勿将资源文件直接保存在res/目录内,否则会出现编译错误
  • 资源的可以通过资源配置限定符来对文件夹进行命名以便根据配置动态选择不同配置下的资源
  • 单组资源可以指定多个限定符,通过短划线分隔,如drawable-en-rUS-land

处理运行时变更

  • 设备配置在运行时发生变化会触发Activity的销毁和重建,目的是通过新配置匹配相应的资源
  • 重启Activity并恢复大量数据代价高,体验差,有两个选择
    • 在配置变更期间保留对象(通过保留Fragment)
    • 自行处理配置变更(manifest中配置configChanges,此后在配置变化时不会自动重启,而是调用onConfigurationChanged(Configuration newConfig),在此回调中自己处理)

本地化

  • 如果命中了缺省配置,但缺省资源文件中不包含所需的资源(如字符串),会有运行时报错并FC
  • 如果多套资源都被配置命中,会优先选择locale(有如下例外),如res/drawable-ja/优先于res/drawable-small-land-stylus/

    Exception: The only qualifiers that take precedence over locale in the selection process are MCC and MNC (mobile country code and mobile network code

  • 管理本地化字符串
    • 把所有字符串都放到string.xml中,避免硬编码

应用权限

  • 通过<uses-permission获取>,权限有两类:normal(不会对用户隐私和设备控制产生影响的)和dangerous,normal会在程序安装时由系统自动授予,dangerous会弹出请求窗
  • 在Android6.0以上版本,dangerous权限都需要手动唤起请求窗来请求获得
  • 组件可以通过android:permission声明所需权限,这样在调起组件的时候会检查调用者是否有对应的权限
  • 权限组,如果应用已经有权限组中的一个dangerous权限,那么在应用请求统一权限组的另一个dangerous权限的时候不需要用户授权,直接可以获得
  • 可以通过Intent来减少权限请求,例如拍照,可以通过系统intent让其他应用来完成而无需请求系统权限
  • 系统不允许不同的package声明同名的permission,除非这些packages是同一个证书签名
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 前言 本文内容来自 Google 开发者平台上的 Android 指南应用基础知识 | Android Devel...
    Little丶Jerry阅读 372评论 0 0
  • 官方说明 Android 应用采用 Java 编程语言编写。Android SDK 工具将您的代码,连同任何数据和...
    adison阅读 560评论 0 0
  • 最近一直在阅读Android开发者网站的API Guide,眼睛看见的知识终归浅薄,现将知识点记录下来并付诸实践,...
    sunnygarden阅读 362评论 0 0
  • 本文是这篇文章的精简版:安卓官方教程 - 应用基础知识 安全沙箱 为什么各个应用之间是无法互相访问文件的?VM和l...
    拾识物者阅读 525评论 0 0
  • 无论工作,学习还是生活,总会让我们陷入十字路口,让我们做出抉择。有时候,目标坚定会忽视了选择的存在,其实是...
    淽沁阅读 155评论 0 0