Activity生命周期
Activity生命周期的4种状态
活动状态(resume)
Activity调用onResume获取焦点
暂停状态(paused)
Activity调用onPause方法,失去焦点,但是可见
停止状态(stopped)
Activity调用onStop方法,不可见
死亡状态(destroy)
Activity调用onDestroy(弹出栈释放资源),或者finish方法(弹出栈,不释放资源)
Activity生命周期的7个回调方法
方法名 特点 onCreate 当Activity第一次创建时被调用 在该方法中我们应该执行 创建视图 初始化数据 该方法被调用后调用onStart onStart 当Activity对用户可见被系统调用 onResume 当Activity与用户交互 获取焦点时 被系统调用 onPause 当Activity失去焦点 但是可见的时候 被系统调用 onStop 当Activity不可见的时候 被系统调用 onDestroy 当Activity将被销毁前调用 为了释放资源 onRestart 当Activity处于stop状态之后 如果重新启动Activity会调用该方法
横竖屏切换时的生命周期
1,默认是先将Activity销毁再创建
onCreate onStart onResume onPause onStop onDestroy onCreate onStart onDestroy
2,设置切换屏不会销毁
android:configChanges="orientation|keyboardHidden|screenSize"
3,如何固定Activity的方向
1,清单文件中:android:screenOrientation="portrait"//portrait表示垂直,landscape水平
2,代码中
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//水平
Activity之间跳转
显示跳转
1,Intent intent = new Intent(Context,SecondeActivity.class);
2,Intent intent = new Intent(Context,"com.test.SecondActivity");
3,Intent intent = new Intent("程序包名","com.test.SecondActivity");
隐式跳转
Intent intent = new Intent();
intent.setAction("要开启的Activity在清单文件中的Action名字");
intent.addCategory(Intent.category.Default);
开启Activity的两种方式
第一种:startActivity(Intent intent);
第二种:startActivityForResult(int resultCode,Intent intent);
Activity间的数据交换
第一种:
FirstActivity中:intent.putExtra("key","value");
SecondActivity中:
Intent intent = getIntent();
intent.getXXXExtra("key");
第二种:
StartActivityForResult(int resultCode,Intent intent);
setResult(int resultCode,Intent intent);
onActivityResult(int requestCode,int resultCode,Intent intent);
Activity的任务栈和4种启动模式
Activity的任务栈
任务栈:
1,开启程序,创建一个任务栈
2,打开一个Activity,进栈
3,离开一个Activity,出栈
4,退出程序,任务栈会被销毁
缺点:
每次打开一个Activity都会添加到栈
1,用户体验差,因为要点多次返回才可以退出
2,重复数据太多,严重的导致内存溢出
Activity的启动模式
作用:就是为了解决任务栈造成的用户体验差,重复数据太多的问题
设置:android:launchMode="standard"
启动模式 特点 应用场景 standard 打开一个Activity,添加一个实例 默认都是 singleTop 栈顶复用模式,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例 流程支付 返回时直接到付款页面 singleTask 栈内复用模式,如果要开启的activity在任务栈的内部已经存在,就不会创建新的实例 浏览器 当其他应用打开浏览器 不管浏览多少页面 只用一个实例 singleInstance 单一实例模式,会重新创建一个栈结构,只存该Activity的实例 打电话进来 ,整个系统只能打一个实例