一、Activity初步认识:【创建、配置、启动Activity】
(一)、创建Activity:
- 创建Activity:继承于Activity或其子类,重写onCreate()方法。
(二)、Activity的注册配置:
作为四大组件之一的Activity,必须要在AndroidManifest清单文件中进行注册。如果没有配置,而又在程序中启动了该Activity,将抛出异常(ActivityNotFoundException)。
注册配置的核心代码:
【附加思考】:
- 当在AndroidManifest清单文件中,设置多个页面都是默认启动页,会报错吗?如果不 报错,到底是执行哪个页面呢?
- 当在AndroidManifest清单文件中,如果不设置默认启动页,会报错吗?
(三)、启动Activity:
- 在Android应用里各组件之间通信使用Intent。一个Activity通过Intent来表达自己的“意图”。
- 常用有四种方式:
方式一: 第一个参数 上下文对象 第二个参数是需要启动的activity的对象
Intent intent=new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);
方式二 :
Intent intent=new Intent();
//指定当前的组件名和需要启动的组件名ComponentName componentName=new ComponentName(MainActivity.this, OtherActivity.class);intent.setComponent(componentName);startActivity(intent);
方式三 : Intent intent=new Intent();intent.setClass(MainActivity.this, OtherActivity.class);startActivity(intent);
//方式四 :
Intent intent=new Intent();
intent.setClassName(MainActivity.this, OtherActivity.class.getName());startActivity(intent);
3.常用启动方式有两种:
- startActivity();
- startActivityForResult();
(四)、Activity之间交换数据:
- 第一种方式:
-
- 甲页面利用intent对象的putExtra()方法传值,乙页面利用getStringExtra()、getIntExtra()等系列方法来一一接收值;
- 第二种方式:【常用】
-
- 甲页面利用bundle对象来保存所有需要传递的数值,通过intent的putExtras()方法传值,乙页面利用intent对象的getExtras()方法返回bundle对象,将所有接收的数据放在bundle对象中,利用bundle的get系列方法一一去除数据。
【备注:】如果甲页面使用putExtras()方法传值,则乙页面使用getExtras()接收值。如果甲页面使用putExtra()方法传值,则乙页面要使用getBundleExtra()方法接收值。
- Activity之间是否可以传递对象呢?【掌握Serializable的用法】
-
- Serializable的用法
- Parcelable的用法
1、传递一般数据的核心代码:
(1)、MainActivity页面:
(2)、NextActivity页面:
2、传递对象数据的核心代码:
(1)、Person对象核心代码:
(2)、MainActivity页面:
(3)、
ReceiverActivity
页面:
二、Activity——调用另一个Activity并返回结果:
(一)、概念:
甲页面调用乙页面,当用户在乙页面完成任务后,程序自动返回到甲页面,而甲页面必须能够获取到用户在完成乙页面后传递的数据结果。
(二)、做法:
与普通的页面交换数据不同的是,要使用startActivityForResult()方法来启动另一个Activity。
(三)、示例代码:
1、MainActivity页面:
2、
ResultActivity
页面:
三、Activity——通过Application进行传值:
1.Application
2.,MainActivity
3.ResultActivity
四、Activity生命周期:
(一)、课堂引入:人的生命周期是怎么样的?
- 胎儿
- 婴儿
- 儿童、少年、青年、中年
- 突发变故
- 老年
- 死亡
(二)、Activity生命周期:
1、Activity一生中有七种不同的状态。
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onRestart()
- onDestroy()
【备注:】
A、七个生命周期组合:
- onCreate、onStart、onResume:启动应用程序
- onPause、onStop:失去焦点
- onRestart、onStart、onResume:重新获得焦点
- onPause、onStop、onDestroy :退出应用程序
B、七个生命周期按阶段划分:
- onCreate() --- onDestroy() 完整生命周期 The entire lifetime
- onStart() --- onStop() 可见生命周期 The visible lifetime:
- onResume() --- onPause() 前沿生命周期(焦点生命周期) The foreground lifetime:
2、定义生命周期的作用:
- ①当用户接一个电话或切换到另一个程序不会崩溃
- ②当用户后台运行程序时不会销毁有价值的系统资源
- ③当用户离开再返回你的应用时不会丢失用户的进程
- ④当手机屏幕进行横竖屏切换的时候不会崩溃或者丢掉用户的进程
3、完整的生命周期图
(三)、实例代码操作:
模仿以下操作,观察输出日志,找寻生命周期方法依次回调的规律:
- 打开主界面,后退键退出
- 打开主界面,进入第二个页面
- 打开主界面,模拟电话进入及挂机,再次显示主界面
- 打开主界面,HOME键退出
- 打开主界面,HOME键退出,再次启动app
- 打开主界面,点击该界面中捆绑退出事件的按钮后退出
- 打开主界面,切换横屏竖屏。
- 生命周期执行的顺序:
04-23 03:51:29.750: I/MainActivity(741): ==MainActivity onCreate执行了
04-23 03:51:29.759: I/MainActivity(741): ==MainActivity onStart执行了
04-23 03:51:29.759: I/MainActivity(741): ==MainActivity onResume执行了
04-23 03:52:04.780: I/MainActivity(741): ==MainActivity onPause执行了
04-23 03:52:04.791: I/MainActivity(741): ==MainActivity onStop执行了
04-23 03:52:04.791: I/MainActivity(741): ==MainActivity onDestroy执行了
04-23 03:52:05.200: I/MainActivity(741): ==MainActivity onCreate执行了
04-23 03:52:05.209: I/MainActivity(741): ==MainActivity onStart执行了
04-23 03:52:05.329: I/MainActivity(741): ==MainActivity onResume执行了
【思考:】
两个Activity页面,点第一个中的按钮,进入第二个页面,此时点HOME退出程序。随后再次启动app,依次会执行哪些生命周期的回调方法。如果再点击返回,继续会执行哪些生命周期的回调方法?
请自己将依次调用的方法写在下面,不要借助机器调试。