https://developer.android.com/guide/components/fundamentals?hl=zh-cn
操作系统
安卓系统是 linux 的定制版本,与 linux 创建用户一样,每个应用程序是一个用户,有自己的私有区域。每个已经安装的程序都有自己的 UID(用户 ID)和 GID(组 ID)。UID 控制程序对文件等资源的访问,GID 允许特定一组用户分组在一起,组内的用户可以在权限内访问共享的文件。
安卓四大组件
- Activity 安卓应用程序的基本构建块,通常是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity 之间通过 Intent 进行通信
- Services 不能自己运行只能后台运行,并且可以和其他组件进行交互
- Broadcast Recevers 类似中断处理程序,用于接收广播 Intent。每次广播到来时,会重新创建 BroadcastReceiver 对象,并调用
onReceive()
方法,执行完以后,该对象即被销毁。当onReceive()
方法在 10s 内没有执行完毕,就会导致 ANR。如果需要执行长任务,那么就必须要使用 Service。 - Content Providers 对外共享数据
AndroidManifest.xml
中定义了程序静态使用的基本组件,解释应用启动程序的时候需要检查的清单。
Intent
一种异步消息机制,可以通信不同程序、同一程序之间的 Activity/Services/BroadcastReceivers ,在运行时绑定指定的组件,将数据封装在 Intent 变量中。(使用 Intent 传递对象有一个局限性,就是不能传递不能序列化的对象)
//Main.java
public void onClick(View v) {
Intent intent = new Intent(Main.this,OtherActivity.class);
intent.putExtra("name", "张三");
intent.putExtra("age", 123);
intent.putExtra("address", "北京");
startActivity(intent);
}
...
//OtherActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
Intent intent = getIntent();
int age = intent.getIntExtra("age", 0);
String name = intent.getStringExtra("name");
String address = intent.getStringExtra("address");
textView.setText("age -->>"+age+"\n"+"name-->>"+name+"\n addresss-->>"+address);
}
程序的启动
点击应用图标,系统调用启动器的 onClick()
方法相应,回调 startActicity()
方法。这个方法是 Activity Manager 的,紧接着它开始调用 startViaZygote
方法(Zygote 是子进程孵化器),在这个方法内部会 fork 一个新进程来启动它,并把这个进程传递给系统管理
- Resumed状态:
- 在这种状态下,该 Activity 在前台运行,用户可以与它进行交互。(有时也简称为 “running” 状态。)
- Paused状态:
- 在这种状态下,该 Activity 被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码。
- Stopped状态:
- 在这种状态下,该活动是完全隐藏,不可见的,可视为存在于后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。
- 当程序第一次运行时用户会看到主 Activity,主 Activity 可以通过启动其他的 Activity 进行相关操作。
- 当启动其他的 Activity 时当前的 Activity 将会停止,新的 Activity 将会压入栈中,同时获取用户焦点,这时就可在这个 Activity 上操作了。
- 根据栈的先进后出原则,当用户按 Back 键时,当前这个 Activity 销毁,前一个 Activity 重新恢复。
内存管理
- OOM(Out of memory):有一个从 -17 到 +15 到评分系统来清理内存,评分越高被清理的可能性越大,在内存满的时候发挥作用
- Low Memory:系统内存在达到一定阈值触发,OOM 会终止非关键的后台进程以及在这些阈值下保存的前台应用