Activity的生命周期
来源:互联网 发布:linux查看mysql连接数 编辑:程序博客网 时间:2024/06/05 04:04
Activity是什么?
- Activity是Android的四大组件之一
- 用户可以与其提供的屏幕进行交互
- 一个Activity可以充满屏幕,也可以悬浮到其他Activity之上!
- 一个应用通常由多个Activity组成
- 一个Activity可以打开任何Activity
如何创建一个Activity?
- 创建一个类继承Activity或其子类
- 重写onCreate()方法
- 在onCreate()方法中,添加setContentView方法
注意:setContentView有三种重载方法,不仅可以直接设置R.layout.xxx布局,也可以直接设置View,动态设置布局,控件在new的时候需要传上下文对象,如thisTextView tv = new TextView(this);
setContentView(tv);
- 必须在清单文件中声明Activity
在application标签下添加activity标签,activity标签中必须写的一个属性是android:name,此属性指明要声明activity的类名(写法注意:包名+类名)
Activity的生命周期
Activity的7个生命周期
- onCreate()
- Activity创建,通常在此方法内加载布局并初始化资源
onStart()
- 不可见得生命周期,后接生命周期是onResume(),他们是一气呵成的,直接调用!
- onStart()这个生命周期,控件已经初始化完成(onCreate()已经走完),那么如果,需要绑定控件的操作,需要在此生命周期调用!
onResume()
- 当前Activity即将进入前端!此时的Activity处于多有Activity堆栈的顶端,获取用户焦点!
- 注: 此时的Activity有着最高的优先级!
- 此时的生命周期,Activity已经可见!此时可以开启动画等需要可见以后操作的操作!
- onPause()
- 此生命周期预示将有另一个Activity将被开启!那么当前Activity需要保留用户需要持久性保存的数据!需要关闭消耗cpu的操作!例如关闭动画!关闭网络链接!关闭数据库链接等!
- 不能做耗时操作!!
- onStop()
- 接onPause()之后调用,此时的优先级已经很弱了,如果系统发生内存不足,那么就会杀死此时的Activity!如果没有被系统杀死,那么重新启动的时候会调用onRestart()!如果被系统杀死了,那么重新启动会调用onCreate()!
- onStop()和onStart()是对立的,如果onStart()进行了某些事物的绑定,那么可以在onStop()中解除绑定!
- onRestart()
- 是当Activity进入onStop()状态,再次启动的时候调用的生命周期!
- onDestroy()
- Activity即将被销毁,通常在此方法内销毁资源
- Activity即将被销毁,通常在此方法内销毁资源
- 三个生命周期
- 全生命周期:onCreate()到onDestroy()
- 可视生命周期:onStart()到onStop()之间
- 前端生命周期:onResume()到onPause()之间
- onCreate()
两个Activity页面跳转的生命周期
- A开启B:
- A开启:A->onCreate()->onStart()->onResume()->Running
- A跳转B:A->onPause()->B->onCreate()->onStart()->onResume()->Running->A->onStop()
- 思考:onPause()为什么不能做耗时操作?
- 新的页面开启,必须在旧的页面执行onPause()方法之后,如果onPause()方法做了过多的耗时操作,那么会影响新页面的开启,给用户卡顿的效果!!
- onPause可以保存用户需要的永久性数据,关闭消耗cpu的操作,例如动画或者网络请求,数据库请求等!但是,以上的操作,必须遵循不能大量耗时!如果,有大量的耗时操作必须做!那么可以选择stop生命周期!
现场保护
- Activity在不做任何保护的时候!切换横竖屏,会销毁再创建!
- Activity在切换横竖屏的时候,会重新加载生命周期,主要是因为横竖屏可能需要同名但是内容不同的布局!需要重新加载!
- 横竖屏切换重新执行生命周期,导致一些控件输入的内容不能保存!所以需要手动的保存数据!进行现场保护!
- 在Android中,EditText、CheckBox如果添加了id会形成自我保护,但仅限于EditText保护文本内容,CheckBox保存勾选状态!
- 现场保护写法
- 第一种方法
- onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
Activity自我保护的方法,在发生异常销毁的时候,例如且切换横竖屏,或者内存不足销毁Activity!那么会调用此方法,我们需要做的是,在此方法中保留数据!数据保存到参数的Bundle中即可!- Bundle:类似于Map,也是一种键值对形式,它的存储的范围大于Map,可以放序列化对象
- onRestoreInstanceState(Bundle savedInstanceState)
当重新加载的时候获取数据
- onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
- 第二种方法
- 切换横竖屏不重新走生命周期
- android:configChanges=”“此标签指定的情况下,不重新走生命周期
- orientation:屏幕方向改变不重新走生命周期(切换横竖屏)
- screenSize:屏幕尺寸改变!Android api14以上改变屏幕方向。认为屏幕此寸也跟着改变了!
- keyboardHidden:软件盘,顶布局,造成生命周期重新加载!加载此限制,不会再重新加载!
- 第三种方法
- 规定横竖屏
- android:screenOrientation=””
- landscape:英文单词为风景画(风景画都是横着的),规定横屏
- portrait:英文单词为肖像(肖像都是竖着的)规定竖屏
- android:screenOrientation=””
- 规定横竖屏
- 第一种方法
Activity跳转传值
- Intent,意图,它是Android四大组件的纽带!例如:开启Activity、发送广播、开启服务
分类:
- 显示意图
- 知名达意
- 隐示意图
- 显示意图
Intent跳转并传递数据
- 一、直接放数据传递
- 利用Intent
- Extra属性,intent.putExtra(key,values)
- 注意:不能直接放置对象,应把对象序列化后再放进去
- 让类实现Serializable接口,应在类中指定serialVersionUID,防止在读取对象的时候,因为类的改变,而造成无法读取的问题
- 取值
- 获取Intent(),获取传递过来的意图,注意:此意图可能来自不同的Acitivity,当获取数据的时候,需要进行非空判断!
- 获取Intent中的数据,intent.get对应类型Extra(key)
- 利用Intent
- 二、封装Bundle进行传值
- 创建一个Intent,intent.putExtras(Bundle),可以把数据放到Bundle
- getIntent(),Bundle bundle=intent.getExtras()
- Bundle中取值即可,bundle.get类型Extra(key)
- 直接传值putExtra和封装Bundle进行传值putExtras
- 相同点:
- 都把数据放到Intent
- 他们传值的类型相同
- 不同点:
- putExtra直接把数据放到Intent上
- putExtras先封装Bundle,把Bundle放到Intent上
Android系统中,常用的是封装Bundle!
- 相同点:
- 三、借助于Application进行传值
- 创建一个类继承Application
- 在清单文件中,application标签下生命android:name=”类名“
- Application可以重写onCreate()生命周期
Application的onCreate()优先于Activity的onCreate(),可以在Application的onCreate()中进行全局的初始化工作! - 在本程序的任何类中,可以调用getApplication(),来获取Application类的对象!
- 一、直接放数据传递
跳转页面并获得返回值
- 当前页面启动Activity,startActivityForResult(Intent,RequestCode);
- setResult(int ResultCode,Intent);
- 当前Activity,onActivityForResult();
- 注意:finish()方法,结束当前Activity
0 0
- 什么是Activity?Activity的生命周期!
- Activity及Activity的生命周期
- Activity 的生命周期
- Android activity的生命周期
- Activity的生命周期
- Android:Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- Activity的生命周期一
- Android Activity的生命周期
- Activity的生命周期
- Android activity的生命周期
- 使用LoadRunner之参数化取值
- 第15周 oj Problem H: 判断字符串是否为回文
- 快速排序
- 456. 132 Pattern
- 字典的使用
- Activity的生命周期
- 学习C语言需要了解的计算机的基本原理知识
- AdapterView
- 网络OSI和TCP/IP参考模型详解
- python中@property装饰器的用法
- 自定义Android资源覆盖rro方案
- HTML&CSS构建网站链接
- mware10+CentOS 6.4 x86_64位安装tomcat1.8.39
- AndroidUI美化以及资源访问