Android学习指南 — Android基础知识汇总,移动开发入门书籍
主要用于实现一些不规则的效果,静态或者动态地显示一些不规则的图形,即重写方法。采用这种方式需要自己支持 ,并且 也需要自己处理。
主要用于实现自定义布局,采用这种方式需要合适地处理 的测量、布局两个过程,并同时处理子元素的测量和布局过程。
用于扩张某种已有的View的功能
用于扩张某种已有的的功能
==
进程() 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
当某个应用组件启动且该应用没有运行其他任何组件时, 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程)中运行。
各类组件元素的清单文件条目、、和
—均支持 : 属性,此属性可以指定该组件应在哪个进程运行。
进程生命周期
1、前台进程
2、可见进程
3、服务进程
4、后台进程
5、空进程
多进程
如果注册的四大组件中的任意一个组件时用到了多进程,运行该组件时,都会创建一个新的 对象。对于多进程重复创建 这种情况,只需要在该类中对当前进程加以判断即可。
class {
@
void () {
Log.d(“”, (.os..myPid()));
super.();
/**
*/
(int pid){
am = ()(.);
List = am.es();
if ( == null) {
null;
for (.o : ) {
if (.pid == pid) {
.;
null;
一般来说,使用多进程会造成以下几个方面的问题:
进程存活
| ADJ级别 | 取值 | 解释 |
| — | — | — |
| | 16 | 一般指将要会缓存进程,无法获取确定值 |
| | 15 | 不可见进程的adj最大值 |
| | 9 | 不可见进程的adj最小值 |
| | 8 | B List 中的 (较老的、使用可能性更小) |
| | 7 | 上一个App的进程(往往通过按返回键) |
| | 6 | Home进程 |
| | 5 | 服务进程( ) |
| | 4 | 后台的重量级进程,//init.rc 文件中设置 |
| | 3 | 备份进程 |
| | 2 | 可感知进程,比如后台音乐播放 |
| | 1 | 可见进程( ) |
| | 0 | 前台进程( ) |
| DJ | -11 | 关联着系统或进程 |
| | -12 | 系统 进程,比如 |
| | -16 | 系统进程 |
| | -17 | 进程(不被系统管理) |
进程被杀情况
进程保活方案
接口
=============
只要实现了 接口,一个类的对象就可以实现序列化并可以通过 和 传递。
使用示例
.os.;
.os.;
class User {
int ;
User( in) {
= in.();
final = new () {
@
User ( in) {
new User(in);
@
User[] (int size) {
new User[size];
};
@
int () {
0;
@
void ( dest, int flags) {
dest.();
int () {
;
方法说明
内部包装了可序列化的数据,可以在 中自由传输。序列化功能由方法完成,最终是通过 中的一系列 write 方法完成。反序列化功能由 来完成,通过 的一系列 read 方法来完成反序列化过程。
| 方法 | 功能 |
| — | — |
| ( in) | 从序列化后的对象中创建原始对象 |
| (int size) | 创建指定长度的原始对象数组 |
| User( in) | 从序列化后的对象中创建原始对象 |
| ( dest, int flags) | 将当前对象写入序列化结构中,其中 flags 标识有两种值:0 或者 1。为 1 时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为 0 |
| | 返回当前对象的内容描述。如果含有文件描述符,返回 1,否则返回 0,几乎所有情况都返回 0 |
与 对比
IPC
===
IPC 即 Inter- (进程间通信)。 基于 Linux,而 Linux 出于安全考虑,不同进程间不能之间操作对方的数据,这叫做“进程隔离”。
在 Linux 系统中,虚拟内存机制为每个进程分配了线性连续的内存空间,操作系统将这种虚拟内存空间映射到物理内存空间,每个进程有自己的虚拟内存空间,进而不能操作其他进程的内存空间,只有操作系统才有权限操作物理内存空间。 进程隔离保证了每个进程的内存安全。
IPC方式
| 名称 | 优点 | 缺点 | 适用场景 |
| — | — | — | — |
| | 简单易用 | 只能传输 支持的数据类型 | 四大组件间的进程间通信 |
| 文件共享 | 简单易用 | 不适合高并发场景,并且无法做到进程间即时通信 | 无并发访问情形,交换简单的数据实时性不高的场景 |
| AIDL | 功能强大,支持一对多并发通信,支持实时通信 | 使用稍复杂,需要处理好线程同步 | 一对多通信且有 RPC 需求 |
| | 功能一般,支持一对多串行通信,支持实时通信 | 不能很处理高并发清醒,不支持 RPC,数据通过 进行传输,因此只能传输 支持的数据类型 | 低并发的一对多即时通信,无RPC需求,或者无需返回结果的RPC需求 |
| | 在数据源访问方面功能强大,支持一对多并发数据共享,可通过 Call 方法扩展其他操作 | 可以理解为受约束的 AIDL,主要提供数据源的 CRUD 操作 | 一对多的进程间数据共享 |
| | 可以通过网络传输字节流,支持一对多并发实时通信 | 实现细节稍微有点烦琐,不支持直接的RPC | 网络数据交换 |
是 中的一个类,实现了 接口。从 IPC 角度来说, 是 中的一种扩进程通信方方式。从 应用层来说, 是客户端和服务器端进行通信的媒介,当 的时候,服务端会返回一个包含了服务端业务调用的 对象。
相较于传统 IPC 来说更适合于系统,具体原因的包括如下三点:
示例&