Android之Activity的生命周期
来源:互联网 发布:手机影集制作软件 编辑:程序博客网 时间:2024/05/16 10:57
一、典型情况下Activity的生命周期
(一)七个生命周期
1、onCreate():生命周期的第一个方法,表示Activity正在被创建;
2、onRestart():当当前Activity从不可见重新变为可见状态时被调用,表示Activity正在被重新启动;
3、onStart():表示Activity正在被启动,这是Activity已经可见,但还没出现在前台,但用户看不到,还无法和用户进行交互;
4、onResume():表示Activity已经可见并且出现在前台并开始活动;
5、onPause():表示Activity正在停止,正常情况下,紧接着onStop就会被调用。此时可以存储数据、停止动画等,但不能太耗时(会影响新Activity的显示);
6、onStop():表示Activity即将停止,可以做一些回收工作,但不能太耗时;
7、onDestory():表示Activity即将被销毁,此时可做一些回收工作和最终的资源释放。
(二)Activity的生命周期切换过程图:
(三)具体说明:
(1)针对一个特定的Activity,第一次启动会回调onCreate –> onStart –> onResume ;
(2)当用户打开新的Activity或切换到桌面时,回调onPause–>onStop(若新的Activity采用透明主题,则当前Activity不会回调onStop);
(3)用户再次回到原Activity时,回调onRestart–>onStart–>onResume;
(4)用户按back键退出时,回调onPause–>onStop–>onDestory;
(5)从整个生命周期来说,onCreate和onDestory是配对的,标识Activity的创建和销毁,且只回调一次;
从Activity是否可见来说, onStart和onStop是配对的,可能被回调多次;
从Activity是否在前台来说,onResume和onPause配对,可能被回调多次;
(6)打开一个Activity A,然后再打开另一个Activity B,对于A:
onCreate –> onStart –> onResume –> A运行 –> A发出打开B的Intent –> onPause–>B可见–>onStop,此时,B会经历一个完整的Activity生命周期。等B结束,A再度可见的时候,A会经历:
onRestart–>onStart–>onResume。
二、在异常情况下Activity的生命周期
情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建。
例如,当前Activity处于竖屏状态的时候突然转成横屏时,系统配置发生了改变,Activity就会销毁并且重建,其onPause, onStop, onDestory均会被调用。因为实在异常情况下终止的,所以系统会调用onSaveInstanceState 来保存当前Activity状态。
情况2:资源内存不足导致低优先级Activity被杀死
Activity优先级
(1)前台Activity——正在和用户交互的Activity,优先级最高
(2)可见但非前台Activity——Activity中弹出的对话框导致Activity可见但无法交互
(3)后台Activity——已经被暂停的Activity,优先级最低。
系统内存不足时,会按照以上顺序杀死Activity,并通过onSaveInstanceState和onRestoreInstanceState这两个方法来存储和恢复数据。
三、代码实例
package com.myapplication;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity { private final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG,"================= onCreate ================"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onRestart() { Log.i(TAG,"================= onRestart ================"); super.onRestart(); } @Override protected void onStart() { Log.i(TAG,"================= onStart ================"); super.onStart(); } @Override protected void onResume() { Log.i(TAG,"================= onResume ================"); super.onResume(); } @Override protected void onPause() { Log.i(TAG,"================= onPause ================"); super.onPause(); } @Override protected void onStop() { Log.i(TAG,"================= onStop ================"); super.onStop(); } @Override protected void onDestroy() { Log.i(TAG,"================= onDestroy ================"); super.onDestroy(); }}
当程序第一次启动的时候:
10-20 23:37:23.422 12310-12310/com.myapplication I/MainActivity: ================= onCreate ================10-20 23:37:23.451 12310-12310/com.myapplication I/MainActivity: ================= onStart ================10-20 23:37:23.451 12310-12310/com.myapplication I/MainActivity: ================= onResume ================
在显示界面点击home键:
10-20 23:38:34.222 12310-12310/com.myapplication I/MainActivity: ================= onPause ================10-20 23:38:34.486 12310-12310/com.myapplication I/MainActivity: ================= onStop ================
然后又点击桌面图标进入:
10-20 23:39:43.817 12310-12310/com.myapplication I/MainActivity: ================= onRestart ================10-20 23:39:43.818 12310-12310/com.myapplication I/MainActivity: ================= onStart ================10-20 23:39:43.818 12310-12310/com.myapplication I/MainActivity: ================= onResume ================
旋转屏幕:
10-20 23:43:05.622 12310-12310/com.myapplication I/MainActivity: ================= onPause ================10-20 23:43:05.622 12310-12310/com.myapplication I/MainActivity: ================= onStop ================10-20 23:43:05.622 12310-12310/com.myapplication I/MainActivity: ================= onDestroy ================10-20 23:43:05.668 12310-12310/com.myapplication I/MainActivity: ================= onCreate ================10-20 23:43:05.686 12310-12310/com.myapplication I/MainActivity: ================= onStart ================10-20 23:43:05.686 12310-12310/com.myapplication I/MainActivity: ================= onResume ================
然后又旋转回来:
10-20 23:43:57.399 12310-12310/com.myapplication I/MainActivity: ================= onPause ================10-20 23:43:57.400 12310-12310/com.myapplication I/MainActivity: ================= onStop ================10-20 23:43:57.400 12310-12310/com.myapplication I/MainActivity: ================= onDestroy ================10-20 23:43:57.429 12310-12310/com.myapplication I/MainActivity: ================= onCreate ================10-20 23:43:57.448 12310-12310/com.myapplication I/MainActivity: ================= onStart ================10-20 23:43:57.449 12310-12310/com.myapplication I/MainActivity: ================= onResume ================
此时点击back键退出:
10-20 23:41:55.761 12310-12310/com.myapplication I/MainActivity: ================= onPause ================10-20 23:41:56.031 12310-12310/com.myapplication I/MainActivity: ================= onStop ================10-20 23:41:56.031 12310-12310/com.myapplication I/MainActivity: ================= onDestroy ================
- Android之Activity的生命周期
- Android之Activity的生命周期
- Android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- Android之Activity的生命周期
- Android之activity的生命周期
- Android之Activity的生命周期
- 【Android】Android之Activity的生命周期
- Android 之 Activity 生命周期
- android之activity生命周期
- Android 之 Activity 生命周期
- Android之Activity生命周期
- Android生命周期之Activity
- android之activity生命周期
- Android之Activity生命周期
- 一些ps会遇到的问题
- Red and Black
- 利用sharepoint 创建轻量型应用之配置传入电子邮件!
- Java泛型
- [BZOJ1059] [ZJOI2007] 矩阵游戏 - 二分图匹配
- Android之Activity的生命周期
- C++——多次free和delete导致错误
- 字符串函数的实现
- 未重新服务器而导致的错误java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is
- c++第三次实验——作业
- HDU 1062 Text Reverse
- java反射机制
- UVA - 12186 Another Crisis 水树形dp
- JavaScript编写人机对战五子棋(六)