其实,理解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。