安卓开发常识

官方文档链接:https://developer.android.google.cn/guide/components/fundamentals

android与linux的关系

Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户;
默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件;
每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。
默认情况下,每个应用都在其自己的 Linux 进程内运行。

与大多数其他系统上的应用不同,Android 应用并没有单个入口点(即没有 main() 函数)。Android 系统设计的独特之处在于,任何应用都可启动其他应用的组件。例如,当您想让用户使用设备相机拍摄照片时,另一个应用可能也可执行该操作,因而您的应用便可使用该应用,而非自行产生一个 Activity 来拍摄照片。

安卓应用的基本构成

应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。共有四种不同的应用组件类型:

  • activity
  • service
  • broadcast receiver
  • content provider

分别对应前、后、收、发。

intent

在四种组件类型中,有三种(Activity、服务和广播接收器)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。
intent是Android程序中各组件之间进行交互的一种重要方式,一般被用来启动活动、启动服务以及发送广播等;intent在启动Activity的时候可以用putExtra(key, value)传递数据,比如说给另一个Activity传递数据。

activity

Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。每个 Activity 都独立于其他 Activity 而存在。其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。

service

服务是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务不提供界面。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。

broadcast receiver

广播接收器允许应用响应系统范围内的广播通知。许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管广播接收器不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。但广播接收器更常见的用途只是作为通向其他组件的通道。

content provider

其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。例如,Android 系统可提供管理用户联系人信息的内容提供程序。因此,任何拥有适当权限的应用均可查询内容提供程序(如 ContactsContract.Data),以读取和写入特定人员的相关信息。

资源

对于Android 项目中加入的每一项资源,SDK 构建工具均会定义唯一的整型 ID,可以利用此 ID 来引用资源。可以通过 XML 文件定义 Activity 界面的动画、菜单、样式、颜色和布局。
Android 系统会在资源目录名称后追加限定符(如为法语字符串值追加 res/values-fr/),根据设备的屏幕方向和尺寸为 Activity 创建不同的布局,等等。

清单文件

每个应用项目必须在项目源设置的根目录中加入 AndroidManifest.xml 文件(且必须使用此名称)。 清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述应用的基本信息。
在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml) 确认组件存在。清单文件还有许多其他作用,如:
确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
根据应用使用的 API,声明应用所需的最低 API 级别。
声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
声明应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库。

view

可视交互组件(比如按钮、文本框)的基类,可以绑定监听函数(比如监听focus)

viewmodel

viewmodel与activity/fragment一一对应,用于准备和管理后者的数据。

observer和observable

observable对象可以有多个observer,若observable实例发生变化,所有observer都会获知。

常见的消息弹窗

toast是一种弹窗提示(中部)。除此之外还有snackbar(底部)、banner(顶部)、dialog(屏蔽其它操作的弹窗)等等。

smali相关

推荐smali的官方说明:
https://github.com/JesusFreke/smali
类型、方法、成员变量说明(比如I代表整数,Lxxx;代表类):
https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields
寄存器(比如p命名法和v命名法)说明:
https://github.com/JesusFreke/smali/wiki/Registers

安卓第三方库

非主业务第三方库继承App客户端的所有权限。
操作系统不会提示权限申请者是宿主App还是第三方库。

App动态加载

App可以在运行时下载代码并执行。
这一技术有时被称为“插件化”。
插件化可用于线上热修复。

顺带提一下,一个dex中最多有65535个方法,超过的话可以用google的multidex方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值