本系列的文章全部为学习摘要,不偏重各种细节展示,更多的是安卓体系重要节点的罗列,并适时加入少量自己的理解分析,以便能快速的回顾安卓体系结构和那些重要的技术点。
每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。比如透明主题或者Dialog主题的Activity。
一个应用通常由多个彼此松散联系的 Activity 组成。Activity的管理一般是系统通过任务和返回栈来进行的,这个后面在记录。
- 创建 Activity
创建 Activity,您必须创建 Activity 的子类(或使用其现有子类)。必须在清单文件里声明该类。例如:
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
一般必须要是实现的方法:onCreate()–在此方法内调用 setContentView(),以定义 Activity 用户界面的布局;;onPause()–此方法是用户离开 Activity 的第一个信号。
- 启动Activity以及获得结果
//启动
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
//启动获得结果
private void pickContact() {
// Create an intent to "pick" a contact, as defined by the content provider URI
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// If the request went well (OK) and the request was PICK_CONTACT_REQUEST
if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
/......
}
}
}
- 实现生命周期回调
在api14+时,系统在Application里添加了记录Activity生命周期的方法ActivityLifecycleCallbacks,挺实用的,还可以根据onstart和onStop的切换来实时监控应用是否处于后台。
其它有关的来个表更合适。
是否能在事后终止?列中标记为“否”的方法可从系统调用它们的一刻起防止承载 Activity 的进程被终止。也就是非极端情况下,在执行这些“否”方法时,该Activity不会被回收。
- 保存 Activity 状态
当Acty被非正常销毁时,系统会先调用 onSaveInstanceState()来保存一些数据。 当系统重建该 Activity,将会将包含数据的 Bundle 同时传递给 onCreate() 和 onRestoreInstanceState()。您可以使用上述任一方法从 Bundle 提取您保存的状态并恢复该 Activity 状态。如果没有状态信息需要恢复,则传递给您的 Bundle 是空值(如果是首次创建该 Activity,就会出现这种情况)。
注意:系统调用 onSaveInstanceState(),它会在调用 onStop() 之前,并且可能会在调用 onPause() 之前进行调用。
- 处理配置变更
有些设备配置可能会在运行时发生变化(例如屏幕方向、键盘可用性及语言)。 发生此类变化时,Android 会重建运行中的 Activity(系统调用 onDestroy(),然后立即调用 onCreate())。处理此类重启的最佳方法是利用onSaveInstanceState() 和 onRestoreInstanceState()(或 onCreate())保存并恢复 Activity 的状态。具体会在后面的文章中记录。
作者: 刘咸尚
- 协调 Activity
当 Activity A 启动 Activity B 时一系列操作的发生顺序:
-> Activity A 的 onPause() 方法执行。
-> Activity B 的 onCreate()、onStart() 和 onResume() 方法依次执行。(Activity B 现在具有用户焦点。)
-> 如果 Activity A 在屏幕上不再可见,则其 onStop() 方法执行。