预备知识
1. Intent
Intent
是信使,负责完成Android
四大组件之间的信息传递,同类、不同类的组件无法直接传递对象,一旦需要沟通只能通过Intent
(不建议通过静态变量或静态方法传递数据,容易造成数据异常、内存泄露等问题)。
2. 生命周期
生命周期是指组件的实例对象从创建到销毁可能会被系统调用的一些方法,每个方法的调用都有特定的条件,可以根据需要重写生命周期方法来达到在某些特定时刻执行特定任务的目的。生命周期方法不建议自行调用,应由系统管理。
3. 注册组件
四大组件都需要通过项目中的AndroidManifest.xml
文件进行静态注册后才可正常使用,其中BroadcastReceiver
可以在其他组件中动态注册(Android
自6.0
版本开始限制静态注册,除少部分广播如开机广播之外,大部分广播的静态注册是无效的)。
4. 响应时间
应用主线程未在规定的时间内执行完任务,系统会报ANR(应用程序无响应)错误,因此应将耗时任务交由子线程完成,具体的限定时间和执行位置如下:
- Activity:5秒内执行完成,包括各个生命周期方法、View的触摸点击事件、输入输出操作等。
- Service:20秒内执行完成,主要是各个生命周期方法。
- BroadcastReceiver:10秒内执行完成,主要是onReceive()方法。
1. Activity
1.1 基本知识
概念
Activity
直译为“活动”,在应用中的一个Activity
可以理解为一个界面,可以包含各类布局与控件展现丰富的可视化效果,主要用于和用户进行交互。一个应用必须通过Activity
来启动和运行,一个应用可以只有一个Activity
,也可以由多个Activity
组成。
应用中的所有Activity
都被系统保存在TaskStack
任务栈中,一般一个应用只有一个TaskStack
任务栈,但也可以调整Activity
的启动模式来开启多个TaskStack
任务栈。既然叫栈,自然是有栈的特性,当前可交互的Activity
在栈顶,先启动的Activity
在栈底,栈顶Activity
出栈则底层Activity
被用户可见并开始交互,任务栈清空时应用结束。
作用
Activity
是应用最直观的入口,一个应用可以没有其他组件,但是不能没有Activity
。用户的IO操作都由Activity
进行处理,应用的数据展示、吸引人的动画、优秀的界面设计等都需要Activity
进行展示,用户只关心看得见的东西,看不见效果再好的应用都没用户量,再牛逼的应用最少也得有文字展示一下不是吗?
生命周期
Activity
的生命周期已经是翻烂的书了,最基础的知识点,千万不可忽视。首先就得上个图:
生命周期大多是成对出现的:
- onCreate()和onDestroy(),生命的起始与终结。
- onStart()和onStop(),界面的可见与否。
- onResume()和onPause(),是否可进行交互。
详细介绍:
- onCreate():第一个调用的方法,通常在该方法中加载布局文件、初始化资源、注册事件与
BroadcastReceiver
等较重的任务。 - onStart():在
onCreate()
方法后调用,通常在该方法中处理UI的显示控制逻辑,任务不可过重,用户此时无法交互也无法直接看见当前Activity
。 - onResume():在
onStart()
方法后调用,通常在该方法中进行简单的数据处理与UI控制,如开始动画,只执行轻量任务,方法执行后用户可进行交互并可直接看见当前Activity
。此时,当前Activity
进入Resumed
状态(运行状态),当一个Paused
状态的Activity
重新位于栈顶时(从其他Activity
返回),会再次调用该方法。 - onPause():当前
Activity
被其他Activity
覆盖时调用,让当前Activity
进入Paused
状态(暂停状态),此时当前Activity
可见但不可交互。通常在此方法中进行简单的数据处理与UI控制,如暂停动画,只执行轻量任务。内存不足且无其他优先级更低的Activity
时,当前Activity
可能会被销毁。当前Activity
重新位于栈顶时(从其他Activity
返回),会调用onResume()
方法。 - onStop(): 当前
Activity
被其他Activity
完全覆盖(若上层Activity
透明或半透明时,只调用onPause()
方法)时调用,当前Activity
进入Stopped
状态(停止状态),当前Activity
不可见。通常在此方法中处理UI的显示控制逻辑,任务不可过重。内存不足且无其他优先级更低的Activity
时,当前Activity
可能会被销毁。还行当前Activity
重新位于栈顶时(从其他Activity
返回),会调用onRestart()
方法。 - onRestat(): 当一个
Stopped
状态的Activity
被返回时,该方法被调用,之后再调用onStart()
方法和onResume()
方法进入运行状态。 - onDestroy(): 当前
Activity</