https://developer.android.com/guide/components/fundamentals?hl=zh-cn

操作系统

安卓系统是 linux 的定制版本,与 linux 创建用户一样,每个应用程序是一个用户,有自己的私有区域。每个已经安装的程序都有自己的 UID(用户 ID)和 GID(组 ID)。UID 控制程序对文件等资源的访问,GID 允许特定一组用户分组在一起,组内的用户可以在权限内访问共享的文件。

安卓四大组件

  1. Activity 安卓应用程序的基本构建块,通常是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity 之间通过 Intent 进行通信
  2. Services 不能自己运行只能后台运行,并且可以和其他组件进行交互
  3. Broadcast Recevers 类似中断处理程序,用于接收广播 Intent。每次广播到来时,会重新创建 BroadcastReceiver 对象,并调用 onReceive() 方法,执行完以后,该对象即被销毁。当 onReceive() 方法在 10s 内没有执行完毕,就会导致 ANR。如果需要执行长任务,那么就必须要使用 Service。
  4. 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状态:
    • 在这种状态下,该活动是完全隐藏,不可见的,可视为存在于后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。
  1. 当程序第一次运行时用户会看到主 Activity,主 Activity 可以通过启动其他的 Activity 进行相关操作。
  2. 当启动其他的 Activity 时当前的 Activity 将会停止,新的 Activity 将会压入栈中,同时获取用户焦点,这时就可在这个 Activity 上操作了。
  3. 根据栈的先进后出原则,当用户按 Back 键时,当前这个 Activity 销毁,前一个 Activity 重新恢复。

内存管理

  • OOM(Out of memory):有一个从 -17 到 +15 到评分系统来清理内存,评分越高被清理的可能性越大,在内存满的时候发挥作用
  • Low Memory:系统内存在达到一定阈值触发,OOM 会终止非关键的后台进程以及在这些阈值下保存的前台应用