安卓(android)开发从入门到精通,学习笔记

开发者指南:https://developer.android.google.cn/guide

API文档:https://developer.android.google.cn/reference/packages

应用基础知识

1.安卓应用

每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护:

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

2.应用组件

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

  • Activity(Activities)
  • 服务(Services)
  • 广播接收器(Broadcast receivers)
  • 内容提供程序(Content providers)

2.1 Activity

Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。 一个应用可以拥有多个activity

相关文档:https://developer.android.google.cn/reference/android/app/Activity

安卓(android)开发从入门到精通,学习笔记,持续记录
生命周期

相关代码:

public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState); /* 在第一次创建活动时调用 */
     protected void onStart();
     protected void onRestart();
     protected void onResume();
     protected void onPause();
     protected void onStop();
     protected void onDestroy();
 }

生命周期的相关说明:

  • onCreate(),在第一次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等,后一个生命周期为onStart()
  • onRestart(),Activity 停止后,在它再次启动之前调用。后一个生命周期为onStart()
  • onStart(),当活动对用户可见时调用。后一个什么周期为onResume()或者onStop()
  • ...

2.2 Services

Services是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业,服务不提供界面。它的核心价值是 “在后台持续提供服务”,主要分为以下几类场景:

1. 执行后台长期任务(无界面、不中断)

这是 Service 最基础的作用,用于处理那些即使应用界面关闭(Activity 销毁),也需要继续执行的任务:

  • 音频 / 视频后台播放(比如音乐 APP 切到后台仍播放);
  • 大文件下载 / 上传(比如网盘 APP 后台下载文件);
  • 实时数据同步(比如聊天 APP 后台同步消息);
  • 定位追踪(比如导航 APP 后台定位)。

2. 为其他组件提供数据 / 功能支持

  • Service 可以作为 “后台服务端”,为应用内的 Activity、Fragment 等组件提供持续的功能支持:
  • 比如一个天气 APP,Service 后台定时请求天气数据,Activity 随时可以从 Service 获取最新数据;
  • 比如一个计算型应用,Service 后台处理复杂计算,Activity 只需接收计算结果。

3. 跨进程提供服务(AIDL)

  • 通过 AIDL(Android Interface Definition Language),Service 可以向其他应用提供跨进程的服务:
  • 比如系统的 “闹钟服务”“通知服务”,都是系统级 Service,第三方应用可以绑定并使用;
  • 比如多个应用共享同一个数据处理服务,通过绑定 Service 实现数据互通。

虽然 Service 是后台任务的核心,但安卓不同版本对后台服务的限制越来越严格(比如 Android 8.0+ 后台 Service 容易被系统杀死),需根据场景选择更合适的方案:

  • IntentService:已过时(推荐用 WorkManager),是 Service 的子类,自动在子线程处理任务,任务完成后自动停止;
  • WorkManager:适合处理 “延迟执行、周期性执行、需要保证执行” 的后台任务(比如定时同步数据),兼容所有安卓版本,自动适配系统限制;
  • ForegroundService(前台服务):需要显示通知的后台服务(比如音乐播放、导航),系统优先级更高,不易被杀死;
  • Coroutine/Thread:简单的短期后台任务(比如单次网络请求),直接用协程 / 线程即可,无需启动 Service。

官方文档:https://developer.android.google.cn/reference/android/app/Service 

3.安卓中的 Uri 

Uri(Uniform Resource Identifier),中文叫统一资源标识符,本质上是安卓系统中用来唯一标识和定位资源的字符串。标准 Uri 遵循固定格式,完整结构如下:

scheme://authority/path?query#fragment

android.net.Uri 是安卓系统提供的专门用于处理 Uri 字符串的工具类,它的核心使命是:

  • 规范地构建符合标准的 Uri 字符串(避免手动拼接出错);
  • 便捷地解析已有的 Uri 字符串(提取其中的 scheme、path、参数等);
  • 提供安全、高效的 Uri 操作方法,替代易出错的字符串手动处理。

简单说:Uri 概念是 “资源地址”,Uri 类是操作这个 “地址” 的 “工具箱”。

官方文档:https://developer.android.com/reference/android/net/Uri

4.Intent 是什么?

Intent(中文:意图)是安卓系统中组件间通信的核心媒介,可以把它理解成:

  • 生活中:一张 “任务通知单”,包含 “要做什么”“给谁做”“需要什么材料”;
  • 开发中:一个封装了 “操作意图” 的对象,用于在Activity、Service、BroadcastReceiver 这三大组件之间传递消息、触发操作。

Intent 是安卓组件之间 “对话” 的语言,比如 Activity A 想打开 Activity B,就需要通过 Intent 告诉系统 “我要打开 B”;应用想播放音乐,就通过 Intent 告诉 Service “请播放 XX 音乐”。

// 1. 创建隐式 Intent,指定“动作(查看)”+“数据(网页 Uri)”
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.baidu.com")

// 2. 启动(系统会匹配所有支持 ACTION_VIEW + http 协议的组件,比如浏览器)
startActivity(intent)

Intent 不仅能 “触发操作”,还能作为 “数据载体”,在组件间传递各种类型的数据(基本类型、对象、Uri 等):

  • 基本类型:String、int、boolean 等(通过 putExtra());
  • 复杂对象:实现 Serializable 或 Parcelable 接口的自定义类;
  • 资源标识:Uri(比如图片 Uri、文件 Uri,结合之前讲的 Uri 知识点)。

官方文档:https://developer.android.com/guide/components/intents-filters?hl=zh-cn