Activity生命周期理解

来源:互联网 发布:蘑菇街宝贝如何优化 编辑:程序博客网 时间:2024/05/15 23:44

其实,理解Activity周期写一个demo可以更好帮助我们体会。

package com.lcl.view;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.i("MM", "onCreate");                // Activity正在被创建;可以做初始化操作 。比如调用setContentView加载界面布局资源,初始化Activity所需数据    }    @Override    protected void onRestart() {        super.onRestart();        Log.i("MM", "onRestart");        //Activity重新启动,Activity从不可见到可见,onRestart会被调用    }    @Override    protected void onStart() {        super.onStart();        Log.i("MM", "onStart");        //Activity正在被启动;此时,Activity可见,但是还没有出现在前台,无法和用户交互,可理解为用户不可见    }    @Override    protected void onResume() {        super.onResume();        Log.i("MM", "onResume");        //Activity已经可见,并且出现在前台并开始活动;与onStart()方法都表示Activity已经可见,        // 区别是onStart()是后台可见,onResume()是前台可见    }    @Override    protected void onPause() {        super.onPause();        Log.i("MM", "onPause");        //表示Activity正在停止,正常情况下,紧接着onStop会被执行    }    @Override    protected void onStop() {        super.onStop();        Log.i("MM", "onStop");        //Activity即将停止,可以做一些回收但不太耗时操作    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.i("MM", "onDestroy");        //表示Activity即将被销毁,此时可以做一些回收和资源释放操作    }}

01)一个事物总是从诞生开始的,Activity作为重要的组件,它的生命周期也是如此。
第一个方法就是诞生onCreate(),那个它可以做些什么事情呢?
onCreate()表示Activity被创建,可以做初始化操作。比如,我们自己写的布局,一些数据初始化都通过这个方法呈现出来

02)新事物出现后,然后开始成长。这就是onStrat()方法。
onStart()方法表示Activity正在被启动,此时Activity由不可见变为可见,但是是后台可见,此时用户还是看不到,还不能与用户交互。

03)新事物出现,不能没用要不然有什么用呢。别着急,onResume()方法发挥作用时刻到了。
onResume()表示Activity可见,此时用户可见并且能交互。

04)但是,这几个方法不能解决所有突发情况。比如,我按了home键,这是有个方法叫onPause(),顾名思义,暂停,表示Activity正在停止,此时可以做一些简单保存,动画暂停等不耗时操作,太耗时会影响Activity显示。仅仅暂停是不行的,还需调用onstop()

05)onStop()表示Activity即将停止,此时可以做一些回收的操作,但同样不能太耗时。

06)onDestroy()方法是Activity即将销毁,此时可以做回收和资源释放操作。

07)onRestart()表示Activity重启,一般Activity从不可见变为可见,会执行此方法。

那么,手机运行一下程序
执行结果:
onCreate()
onStart()
onResume()
解释一下,Activity从开始创建(onCreate) 到启动 (onStart)然后我们能看到界面(onResume)就是这三个方法
此时按下home键,
执行结果:
onPause()
onStop()
解释一下,从界面出现到后台过程,先执行暂停(onPause)然后停止(onStop)
此时点击桌面程序,执行结果:
onRestart()
onStart()
onResume()
解释一下,从桌面点击时,此时是后台运行,从后台可见到前台可见在程序未销毁前提下,会执行重启,不需要重新创建,onRestart(),然后执行被启动onStart(),最后执行onResume()用户可见界面。
如果按下的是返回键,执行结果:
onPause()
onStop()
onDestroy()
解释一下,跟home键不同的是执行销毁了,此时程序结束了
在用户可见界面按下电量键,执行结果:
onPause()
onStop()
跟使用home键效果一样,都是从用户可见状态到用户不可见,后天可见状态。
此时再解锁屏保,执行结果:
onRestart()
onStart()
onResume()
从后台到前台用户可见过程

执行截图 音量键+电量键,执行结果:
没有执行任何周期方法,说明截图没有对Activity产生影响。

那么横竖屏生命周期会怎么样呢?
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,横竖屏都执行一次。

2、设置Activity的android:configChanges=”orientation”时,跟不设置一致,切屏还是会重新调用各个生命周期,横竖屏都执行一次

3、a. android:targetSdkVersion <= 12时,不会重新创建
b. android:targetSdkVersion > 12时,和不设置一样,重新创建。
c. 该点是网上获得的资料,没测试。在4.0以下的是不重建,而4.0以上的则为a,b所叙述。本测试机器为4.3。
设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,不重新创建Activity。

0 0
原创粉丝点击