第一天:Android简介
师傅领进门,修行靠自己!我师父很牛逼,他叫时间,英文名Time。
1. 总的来说Android可以开发创新应用和游戏,近年Android不好就业,那些培训机构贡献了不少开发创新应用的人,所以这一块饱和很正常。Android游戏这块,可还是很稀有的,想来优秀的游戏开发者,应该是不屑于在培训机构供职吧。
2. Android是用Java开发的,但最近有一个叫Kotlin的语言,也可以进行Android应用开发。不过暂时不建议用,因为招聘方不会把这个算优势,毕竟绝大多数应用,目前还是在用java的。Android SDK 工具将您的代码 — 连同任何数据和资源文件 — 编译到一个 APK:Android 软件包,即带有 .apk 后缀的存档文件中。一个 APK 文件包含 Android 应用的所有内容,它是基于 Android 系统的设备用来安装应用的文件。
3. 我用Linux系统,可以切换用户,甚至赋予权限,Android系统的应用,就是Linux下的用户,每个应用对应不同的用户。你记不记得,开启Android Studio的时候,输入命令需要添加“sudo”,如果你设置过管理员密码,还要输入密码,才会通过命令开启Android Studio。其实Android系统给每个应用(也可说是“用户”)赋予了不同的权限,有的能读写SQLite,有的能访问网络,有的啥权限都有,就是啥都不干。。。每个应用在开启的时候,都会分配一定的VM,有VM就得分配内存,所以Android的OOM,才会被提上案头。鬼知道自己在使用手机时,会有多少应用(用户)在后台占用内存,而每个应用,又能分配多少内存,所以开发应用,首先要注意内存分配,别学会了多线程编程,就胡来,用完记得关。
4. Android 系统可以通过这种方式实现最小权限原则。也就是说,默认情况下,每个应用都只能访问执行其工作所需的组件,而不能访问其他组件。 这样便营造出一个非常安全的环境,在这个环境中,应用无法访问系统中其未获得权限的部分。有些应用为了以后发展(不如说是野心),特么的把自己用能用到的,不能用到的权限,都申请了一遍,无耻。。。。
5. 可以安排两个应用共享同一 Linux 用户 ID,在这种情况下,它们能够相互访问彼此的文件。 为了节省系统资源,可以安排具有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM(应用还必须使用相同的证书签署)。
6. Android四大组件我都懒得说了,这是基础,介绍我直接复制粘贴了。
Activity
Activity 表示具有用户界面的单一屏幕。例如,电子邮件应用可能具有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。 尽管这些 Activity 通过协作在电子邮件应用中形成了一种紧密结合的用户体验,但每一个 Activity 都独立于其他 Activity 而存在。 因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。 例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。
Activity 作为 Activity 的子类实现,您可以在 Activity 开发者指南中了解有关它的更多详情。
Service
服务是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 服务不提供用户界面。 例如,当用户位于其他应用中时,服务可能在后台播放音乐或者通过网络获取数据,但不会阻断用户与 Activity 的交互。 诸如 Activity 等其他组件可以启动服务,让其运行或与其绑定以便与其进行交互。
服务作为 Service 的子类实现,您可以在服务开发者指南中了解有关它的更多详情。
Content Provider
内容提供程序管理一组共享的应用数据。您可以将数据存储在文件系统、SQLite 数据库、网络上或您的应用可以访问的任何其他永久性存储位置。 其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。 例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何具有适当权限的应用都可以查询内容提供程序的某一部分(如 ContactsContract.Data),以读取和写入有关特定人员的信息。
内容提供程序也适用于读取和写入您的应用不共享的私有数据。 例如,记事本示例应用使用内容提供程序来保存笔记。
内容提供程序作为 ContentProvider 的子类实现,并且必须实现让其他应用能够执行事务的一组标准 API。 如需了解详细信息,请参阅内容提供程序开发者指南。
BroadcastReceiver
广播接收器是一种用于响应系统范围广播通知的组件。 许多广播都是由系统发起的 — 例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播 — 例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。 例如,它可能会基于事件发起一项服务来执行某项工作。
广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。 如需了解详细信息,请参阅 BroadcastReceiver 类。
启动组件
四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。Intent 会在运行时将各个组件相互绑定(您可以将 Intent 视为从其他组件请求操作的信使),无论组件属于您的应用还是其他应用。
Intent 使用 Intent 对象创建,它定义的消息用于启动特定组件或特定类型的组件 — Intent 可以是显式的,也可以是隐式的。
对于 Activity 和服务, Intent 定义要执行的操作(例如,“查看”或“发送”某个内容),并且可以指定要执行操作的数据的 URI(以及正在启动的组件可能需要了解的信息)。 例如, Intent 传达的请求可以是启动一个显示图像或打开网页的 Activity。 在某些情况下,您可以启动 Activity 来接收结果,在这种情况下,Activity 也会在 Intent 中返回结果(例如,您可以发出一个 Intent,让用户选取某位联系人并将其返回给您 — 返回 Intent 包括指向所选联系人的 URI)。
对于广播接收器, Intent 只会定义要广播的通知(例如,指示设备电池电量不足的广播只包括指示“电池电量不足”的已知操作字符串)。
Intent 不会启动另一个组件类型 - 内容提供程序,后者会在成为 ContentResolver 的请求目标时启动。 内容解析程序通过内容提供程序处理所有直接事务,使得通过提供程序执行事务的组件可以无需执行事务,而是改为在 ContentResolver 对象上调用方法。 这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。
每种类型的组件有不同的启动方法:
您可以通过将 Intent 传递到 startActivity() 或 startActivityForResult()(当您想让
Activity 返回结果时)来启动 Activity(或为其安排新任务)。 您可以通过将 Intent 传递到startService() 来启动服务(或对执行中的服务下达新指令)。 或者,您也可以通过将 Intent 传递到
bindService() 来绑定到该服务。
您可以通过将 Intent 传递到 sendBroadcast()、sendOrderedBroadcast() 或
sendStickyBroadcast() 等方法来发起广播;您可以通过在 ContentResolver 上调用 query() 来对内容提供程序执行查询。
Cursor query (Uri uri,
String[] projection,
Bundle queryArgs,
CancellationSignal cancellationSignal)
- 清单文件,没啥可说的,你开发俩仨应用,自己感受,保你明明白白的。
过两天我详述。
Activity 的 <activity> 元素
服务的 <service> 元素
广播接收器的 <receiver> 元素
内容提供程序的 <provider> 元素
- 当你阅读更多关于Android开发,你可能会遇到的各种情况下的术语“兼容性”。有两种类型的兼容性的:设备兼容性 和应用程序的兼容性。
- 该API级别允许你声明与您的应用程序是兼容的,使用的最低版本
<uses-sdk>
清单标签和它的 minSdkVersion 属性。