详解 Android Activity 生命周期
从以下几个方面详细说一下Activity的生命周期:
1.回到主屏幕再打开和退出程序的时候。
2.屏幕旋转的时候。
3.打开其它的Activity的情况。
4.打开一个Layou透明的Activity的情况。
源代码:MyApplication.7z
先来一张Activity的生命周期图镇楼。
新建一个工程,实现如图所示的生命周期的所有方法,只是在方法里添加一个打印输出,让我们能清楚的看到
当前Activity执行的生命周期回调方法。
@Override
protected void onStart() {
System.out.println("onStart");
super.onStart();
}
@Override
protected void onResume() {
System.out.println("onResume");
super.onResume();
}
@Override
protected void onPause() {
System.out.println("onPause");
super.onPause();
}
@Override
protected void onStop() {
System.out.println("onStop");
super.onStop();
}
@Override
protected void onRestart() {
System.out.println("onRestart");
super.onRestart();
}
@Override
protected void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
当我们第一次运行我们的程序,app进入主页面,看一下logcat的输出:执行了onCreate、onStart、onResume方法。
1.返回到主屏幕的时候。
我们按一下Home键返回到主屏幕,看一下它的执行的动作。
执行了onPause和onStop方法。点击我们的app,进入主程序发现它执行了onRestart、onStart和onResume。
我们第一次运行app的时候是没有执行onRestart方法的。和我们看官方的文档一至,在Activity被停止后再次激活的时候
才会被调用。
Called after your activity has been stopped, prior to it being started again.
Always followed by onStart()
我们点击关闭app看一下它会回调哪些生命周期函数。
这时它会执行onStop和onDestory方法。至此我们走完了一个最简单的生命周期流程。
2.旋转屏幕的时候。
运行我们的应用程序,和第一次打开一样调用create,start.和resume
接下来我们旋转一下屏幕看一下会发生什么。
一下子。调用了好多。它是先把Activity关闭掉,再重新new一个activity。这里就要注意了,如果我们的程序
需要支持屏幕旋转,那我这就要调用onSaveInstanceState()方法来保存当前的数据状态,在onCreate方法里恢复
这些状态的值。
3.打开一个其它的Activity.
修改一个我们的程序,在主页面加一个按钮,再加一个Activity。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
/>
点击按钮的时候打开我们新添加的Activity
final Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MessageTip.class);
startActivity(intent);
}
});
运行我们的App.还是和之前一样调用 onCreate(),onStart() 和onResume.
然后在主页面上按一下我们的按钮,打开另一个Activity.
按返回键看一下。
它会调用onRestart(),onStart(),onResume。这样和我们讲的方法1.进入主屏幕再返回是一样的。
4.打开透明的Activity.
透明的Activity我们做一个简单的,直接在AndroidManifest.xml里添加一个行代码
再运行我们的app.调用那三个方法。
点击主页上的按钮打开透明的Activity.看一下调用了哪些函数。
只调用了onPause。点击返回
调用了onResume()方法。
发现没打开透明的Activity,原Acitvity没有调用onStop()方法,关闭透明的Activity。原Activity没有调用onRestart()
和onStart()方法。
ok就到这里,activity的生命周期非常重要!activity的生命周期非常重要!activity的生命周期非常重要!
重要的事情说三遍!!
源代码:MyApplication.7z
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- php实现大文件断点续传下载实例代码
- Laravel第三方包报class not found的解决方法
- 使用laravel的migrate创建数据表的方法
- 解决laravel session失效的问题
- php7下的filesize函数
- PHP-FPM 设置多pool及配置文件重写操作示例
- laravel实现登录时监听事件,添加登录用户的记录方法
- php更新cookie内容的详细方法
- php实现映射操作实例详解
- Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
- yii框架数据库关联查询操作示例
- laravel-admin的多级联动方法
- Laravel数据库读写分离配置的方法
- php给数组赋值的实例方法
- php实现分页功能的详细实例方法