Activity的使用及生命周期探索:
生命周期探索请直接移步 标题 10.
1.概述:
提供能够 ②与用户交互的 ①界面
2.组件的特点:
- 继承父类或实现接口
- 需要注册
- 对象,是系统创建的
- 生命周期方法的自动调用
3.如何声明一个Activity.
- 继承;
- 重写 onCreate() 等;
- 注册;
- 布局;
4.如何启动一个Activity.
-
startActivity(intent)
-
startActivityForResult
Activity1:startActivityForResult(int requestCode,Intent intent) Activity2:setResult(int resultCode,Intent intent); finish(); Activity1: onActivityResult(int requestCode,int resultCode,Intent intent)
5.Intent的使用:
Intent不是组件!意图,提供不同组件通信的信使。
-
要去哪?
显式意图Intent(obj,Class clazz),隐式意图Intent(String action) -
能带数据吗?
可以!不过这里的 finish() 不要忘;忘了的话也没关系……那你就按 back 键,不还是 finish() 嘛……
putExtra(String key,Xxx xxx)---getXxxExtra(String key)
setData(Uri uri) ---getData();
Uri uri = Uri.parse("tel:" + number); -->url (http:)
("content:" + )
6.任务栈的结构:先进后出
- 不可以操作系统的栈结构;
- 如果确实需要操作,可以参考我的 P2P金融项目 笔记 02 提供的 AppManager 类;统一应用程序中所有的Activity的栈管理
7.LaunchMode:
-
standard ;标准模式;
-
singleTop 适用于 目标 activity 启动费时的情况,给目标 activity 设置 singleTop ,防止用户多次点击,创建多个活动 (那不更卡了……) ;
-
singleTask 设置为此时,任务栈里只新建一个该活动;当栈顶的活动调用该活动时,自动清空栈中,目标活动上的所有活动;
-
singleInstance 新建一个栈单独存储;少见……
8. Activity的生命周期。
-
4 种状态:运行状态,暂停状态,停止状态,死亡状态。
不同状态之间,切换时,哪些生命周期方法调用; -
7 个生命周期方法。
onCreate()— onDestroy():对象是否存在。(在对象整个生命周期过程中,只调用一次)
onStart()— onStop():当前activity是否可见
onResume() — onPause():当前的activity是否可操作 -
面试考查:
①Activity1–>Activity2.
②demo总结;
9.不同的生命周期方法中,常做哪些操作。
-
onCreate();setContentView(),视图的初始化,绑定监听
-
onDestroy();正常情况下,销毁一个activity对象之前调用。
-
onPause();当activity结束运行状态时,临时数据的保存。(不适合执行数据量较大的保存操作:数据库)
-
onSaveInstanceState() / onStop():用于保存数据(执行时间较长);onSaveInstanceState() 操作在onPause()和 onStop()之间;
10. Activity 生命周期探索
A. 普通启动第二个页面;
-
P1首先不可操作,
onPause()
-
而后P2创建;可视;可操作;
-
最后P1才不可见;
onStop()
MainActivity onPause() SecondActivity onCreate() SecondActivity onStart() SecondActivity onResume() MainActivity onStop()
-
在P2通过返回键;返回到P1;此时P1调用 onRestart() 或 onCreate()取决于是否 finish(),不过通过 返回键的最后,P2会 onDestroy;
SecondActivity onPause() MainActivity onRestart() MainActivity onStart() MainActivity onResume() SecondActivity onStop() SecondActivity onDestroy()
B. 带回调启动第二个页面;
-
从P1携带信息去P2时;这里的 onSaveInstanceState() 在 onStop() 之前执行;这也就决定了,在什么时候写数据保存操作;
MainActivity onPause() SecondActivity onCreate() SecondActivity onStart() SecondActivity onResume() MainActivity onSaveInstanceState() MainActivity onStop()
-
从P2携带信息回到 P1时;这里的重中之重是;P1的onActivityResult() 先 onResume() 执行; 以确保重新显示的时候,之前的数据已经恢复;
SecondActivity onPause() MainActivity onActivityResult() MainActivity onRestart() MainActivity onStart() MainActivity onResume() SecondActivity onStop() SecondActivity onDestroy()
C. 启动 DialogActivity
-
dialog 出现在最上层,P1 可见,不可操作;依次执行的是;
MainActivity onPause() MainActivity onSaveInstanceState()
-
返回到 P1
MainActivity onResume()
D. 启动 AlertDialog
-
效果如下:
-
但是 P1毫无波澜;
-
这是因为,AlertDialog 是 P1 的一部分;所以P1的生命周期没有改变;
代码如下,当启动 DialogActivity 时,启动的是另外一个 Activity;当启动 AlertDialog 时;传入的 参数是 “this”;并且此处也只能是 this;所以 P1 生命周期不改变;
public void startDialogActivity(View v) { startActivity(new Intent(this, DialogActivity.class)); } public void startDialog(View v) { new AlertDialog.Builder(this) .setTitle("测试") .setPositiveButton("确定", null) .setNegativeButton("取消", null) .show(); }
11. 熄屏下的生命周期
-
熄灭屏幕;先是不可操作,随后是不可见;二者之间时保存数据;
MainActivity onPause() MainActivity onSaveInstanceState() MainActivity onStop()
-
点亮屏幕;此时没有
onActivityResult()
;这个方法需要三个参数:onActivityResult(int requestCode, int resultCode, Intent data)
;MainActivity onRestart() MainActivity onStart() MainActivity onResume()
12. 横竖屏
-
解决横竖屏造成的 activity 生命周期方法重新调用:
<activity android:name=".MainActivity" android:configChanges="keyboardHidden|screenSize|orientation" />
声明:本博客根据尚硅谷项目实战: 硅谷金融.学习整理;