意图的作用:激活组件, 传递数据;
组件:Activity,Service,broadcastReceiver,contentProvider;
隐式意图:在开启目标activity时,没有直接指定activity的名称,而是通过指定一组动作\数据\类型等,让系统在清单文件中自动的去匹配activity,如果匹配到了就打开;
模版代码:
//打开第二个界面
Intent intent =new Intent();
// 设置动作,是目标activity的动作
intent.setAction("com.itheima.multiview.SECONDACTIVITY");
// 设置数据,是目标activity的数据
intent.setData(Uri.parse("itheima://abc"));
// 添加类型,是目标Category的数据
intent.addCategory("android.intent.category.DEFAULT");
// 打开第二个界面
startActivity(intent);
应用场景:适合开启另外一个软件中的activity; 执行的速度慢;
显式意图:在开启目标activity时,直接指定了activity的名称,然后打开这个activity;
模版代码:
// 使用显示意图打开第二个界面
Intent intent =new Intent(this,SecondActivity.class);
// 打开第二个界面
startActivity(intent);
应用场景:适合开启自己工程中activity;执行的速度快;
2_意图传递数据(重点)
意图可以传递的数据类型:
1.八大基本类型及其数组;
2.parcelable(把对象序列化到内存中),serializable(把对象序列化到文件中);
3.bundle:类似于map集合;
4.intent:
使用的方法:putExtra(),putExtras();
3_开启activity获取返回值
从第一个界面跳转到第二个界面,当第二个界面关闭时给第一个界面返回数据,第一个界面接收到第二个界面返回的数据.
1.startActivityForResult()
2.在第二个界面中 调用setResult方法设置返回数据,然后调用finish方法关闭当前界面;
3.在第一个界面中调用onActivityResult方法接收从第二个界面返回的数据;
4_activity的生命周期
生命周期:对象从被创建到被销毁的这段时间内调用的方法;
暗恋,初恋,热恋,痴恋,失恋;
onCreate:当activity实例被创建后调用这个方法 初始化实例对象
onStart:界面可见后调用这个方法
onResume:界面获得焦点后调用这个方法
onPause:界面失去焦点后调用这个方法
onStop:界面不可见后调用这个方法
onRestart:最小化的界面被打開后調用這個方法
onDestroy:activity实例被销毁前调用这个方法 通常在界面銷毀之前調用這個方法保存數據
打开一个界面调用了onCreate,onStart,onResume;
关闭一个界面调用了onPause,onStop,onDestroy;
最小化一个界面调用了onPause,onStop;
打开最小化的界面调用了:onRestart,onStart,onResume;
5_读文档查看activity的生命周期
完整的生命周期:从实例对象被创建到被销毁期间,调用的方法:onCreate,onStart,onResume,onPause,onStop,onDestroy;
可视生命周期:从界面可见到界面不可见的期间,调用的方法:onStart,onResume,onPause,onStop;
前置生命周期:从界面获得焦点到失去焦点的期间,调用的方法:onResume,onPause;
6_横竖屏切换的生命周期
横竖屏切换的生命周期的变化:关闭前一个界面,打开一个新的界面,调用的方法有:onPause,onStop,onDestroy, onCreate,onStart,onResume;
设置屏幕的方向: 在activity节点中设置android:screenOrientation="sensor"( landscape横屏 portrait竖屏 sensor横竖屏自适应)
禁止调用生命周期的方法: 在activity节点中设置android:configChanges="keyboardHidden|orientation|screenSize"
7_activity的启动模式:standar/singleTaskr/singletop/singleinstance
standar模式:当应用程序一启动的时候系统就给提供了一个任务栈,当打开一个界面时,就会这个界面对应的activity实例压入到栈中;当关闭一个界面时,就会从任务栈中把这个界面对应的activity实例清除出去;当界面都关闭了,任务栈就被清空了,应用程序也随着退出了.
singletop单一顶部模式:当打开一个界面,系统会在任务栈中检查位于顶部的任务是不是当前任务,如果是,就不会创建一个新的实例对象,而是使用位于栈顶的这个对象;
singleTask单一任务模式:当打开一个界面,系统会在任务栈中检查有没有这个activity对应的任务,如果有,会把位于它上面的所有任务都清除掉,然后使用这个任务;
singleinstance单例模式:当打开一个界面,系统会给它提供一个特殊的任务栈,在特殊的任务栈中,只有它的实例对象存在;