带你重新认识Activity的方方面面
来源:互联网 发布:学plc编程 编辑:程序博客网 时间:2024/06/05 21:55
一、Activity的生命周期
Activity中定义了七个回调方法,覆盖了活动生命周期的每一个环节。
onCreate():它在活动第一次创建时被调用,在此方法中完成活动的初始化操作,如:加载布局,绑定事件等。
onStart() :当活动由不可见变为可见时调用。
onResume():当活动准备好与用户进行交互时调用,此时活动一定位于返回栈的栈顶,并且处于运行状态。
onPause:在系统去启动或恢复另外一个活动时调用,在此方法中将一些消耗cpu的资源释放掉,并且保存一些关键性数据。
onStop():当活动变为完全不可见时调用。
onDestroy():活动销毁之前调用,一些容易导致内存溢出的资源都要在此方法中释放,如:移除消息和回调,解注册Receiver,释放MediaPlayer等。
onStart():当活动由停止状态变为运行状态时调用,也就是活动被重新启动。
注意点:
1、横竖屏切换会重新调用Activity的各个生命周期,默认首先销毁当前Activity然后重新加载。在功能清单文件里添加android:configChanges="orientation|keyboardHidden|screenSize"切屏不会重新调用生命周期的各个方法,只会执行onConfigurationChanged()方法。游戏开发或者全屏播放视频时,朝向都是写死的。
2、恢复或启动另外一个activity时,如果另一个activity是窗口样式(对话框)将只调用:onPause方法,即当前activity处于可见但不可操作状态。
否则会调用:onPause()-->onStop(),当前activity处于不可见且不可操作的状态。
二、Activity的四大启动模式
1、standard:默认标准的启动模式,每次startActivity都是创建一个新的Activity实例。适用于绝大多数情况。 2、singleTop:单一顶部,如果要开启的activity已经处于任务栈的栈顶,就不会创建新的实例。 3、singleTask:单一任务栈,Activity在任务栈里只会存在一个实例,如果要激活的activity在任务栈里已经存在, 就不会再创建新的activity,而是复用这个已经存在的activity。 ps:此模式启动activity时会清空任务栈里在这个activity之上的所有activity。 4、singleInstance:单例模式,整个手机操作里只有一个实例存在,不同的应用去打开这个activity,共享同一个activity实例。 ps:它会运行在自己独立的任务栈里,并且任务栈里只有它一个实例存在。
三、创建一个Activity的步骤
1、继承于Activity或FragmentActivity,CompatActivity。
2、在功能清单文件中注册
3、完成activity对应的布局文件
4、重写onCreate()并加载布局
四、在Activity的使用过程中,哪些位置用到了反射
1、在系统创建Activity对象的时候,组件都是系统自动创建的,所以组件都要在功能清单文件中注册并标明全类名。
2、加载布局文件时,系统通过反射创建指定标签对应的视图对象。
3、显示意图中:Intent intent = new Intent(Context context,Class clazz);intent携带另外一个Activity 的类型信息,系统根据类型创建另外一个activity的对象。
五、后台Activity被系统回收怎么办,如何保存回收前状态?
1、原因:除了在栈顶的activity,其他的activity都可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的几率愈大。
2、解决:可以每隔一段时间保存一次,保存到本地。下次启动时恢复。
3、回收场景:
1)资源相关的系统配置发生改变导致Activity被杀死并重新加载,如:横竖屏切换,键盘的显示与隐藏。
2)内存资源不足时导致低优先级的Activity被杀死
3)按下Home建
4)启动另一个activity
4、onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等。而不应该用来保存持久化数据,持久化数据应该当用户离开当前的 activity时,在 onPause() 中保存(比如将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,所以这点要理解。
六、其他
1、Activity的跳转分类:显式跳转,隐式跳转
2、隐藏标题栏
1)标题栏:Android4.0加入了Action Bar,但是可能觉得标题栏占用屏幕空间,使得内容区域变小
2)在setContentView()之前加上:requestWindowFeature(Window.FEATURE_NO_TITLE);
3、要注意的是:Activity,Service,Application是ContextWrapper的三个子类
- 带你重新认识Activity的方方面面
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- 带你重新认识sql语句
- Victor带你重新认识XPages
- 重新认识Android Activity的生命周期
- 带你重新认识:Android Splash页秒开 解决启动长时间白屏或黑屏的问题
- 重新认识Activity
- 重新认识Activity生命周期方法
- 教你9招重新认识你的老板
- 带你认识常用的Git命令
- 带你认识最小二乘法
- 带你认识QOwnNotes
- 带你认识QOwnNotes
- 带你认识QOwnNotes
- 请重新认识你作为程序员的价值
- 【转载】请重新认识你作为程序员的价值
- 常用设计模式
- Camera2.0 控制摄像头拍照
- MySql错误处理
- oracle笔记
- 利用Cmake 将最新版本OBS编译成windows版本。
- 带你重新认识Activity的方方面面
- DAY22:leetcode #36 Valid Sudoku
- Swarm和Mesos集成指南-原理剖析
- UE4 Error when building: -waitmutex" exited with code 5 . Please verify that you have sufficient rig
- 继承的5种方式
- Android HttpUtils-Http请求的工具类
- eclipse导入其他项目运行时报404错误
- ListView嵌套ListView
- 欢迎使用CSDN-markdown编辑器