您的位置:首页 > 其它

安卓四大组件之 Activity

2016-09-16 21:30 267 查看
    Activity是安卓提供给用户与手机之间可交互的界面组件,也是四大组件中比较重要的组件。他是通过一个窗口来描述界面视图的工具 

Activity从创建到生命结束,都有其独特的回调方法

Activity的生命周期:

onCreate、onStar、onResume、onRestart、onPause、onStop、onDestroy


Activity正常的生命周期一般情况下分为7种 :onCreate  onStar  onResume  onRestart  onPause  onStop onDestroy

在安卓官方的API上面详细介绍了各个回调的方法的回调时机

下面就简单概述下生命周期的回调方法



onCreate方法在调用构造方法之后 系统会自动调用这个方法,一般在此方法中初始化控件设置全局资源 设置全局控件 

在整个Avtivity的生命周期中,这个方法只会调用一次

在Activity的创建过程中除了调用onCreate 还会调用onStar  onResume 当这两个个方法调用完成之后,界面才会变成可交互的 Activity处于运行状态

onStar在Activity可见事就会调用这个方法 但是此时界面还不能交互

onResume 界面已经可见 而且可以和用户交互了 这时会调用这个方法

onResart在Activity从不可见状态到可见状态会调用这个方法  注意:在在Activity第一次创建的时候并不会走这个方法 只有在Activity从onStop状态下唤醒时才会调用这个方法

onPause  在界面即将不可见的时候会调用这个方法  Activity处于暂停状态 是界面即将不可将的时候调用 而onstar 是在界面即将可见的时候调用 

这个方法通常用来数据的持久化 和动画的终止 。

例:当Activity A 调用Activity B时 A的onPause方法就会被调用 之后B调用 onCreate onStar onRsume ,当A完全不可见识就是调用A的onStop方法  

请不要在A中的onPause方法中做耗时的操作

而且当系统的内存资源严重不足的时候,系统就会自动销毁处在onPause状态下的Activity以用来回收内存,所以onpause还是可以保证在Activity销毁之前一定会调用的声明方法

onStop 两种情况下会被调用 

1.当前的Activity被销毁时

2.有一个Activity完全挡住了当前的这个Activity

这个方法可以用来停止刷新界面的操作

当Activity处于onStop状态下 有可能会因为系统资源不足,而导致Activity被销毁 

但是有可能Activity声明处于onpause状态下,就被系统销毁,所以这个方法不一定能保证调用

onDestroy 

在Activity销毁之前会调用这个方法 

一般会用来释放资源

注意:在系统资源不足的情况下,会将已经调用的onpause·或onStop方法回收,所以这个方法也不能保证一定会被调用

onResart

当Activity从onStop状态从新回到运行状态时 ,会走这个方法

当然上述情况是在Activity正常情况下的声明周期,有正常情况肯定还会有异常的情况

异常情况下Activity的声明周期:

实际的开发中异常情况大致分为两种:

1.资源的相关配置,导致Activity被销毁后重建

2.系统内存不足,导致优先级低的Activity被销毁

异常情况:
屏幕旋转,Activity被强制销毁

屏幕旋转:每次旋转 Activity就会自动销毁 然后立即重新创建一个新的
为了不让其创建新的Activity有两种方案:

1.把方向写死,屏幕旋转 布局方向不变

  <activity
            android:name ="com.shengmingzhouqi.MainActivity"
            android:label ="@string/app_name"
            android:screenOrientation ="portrait"   <!--landscape水平  portrait竖直  -->
          >

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,

只会执行onConfigurationChanged方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息