Android Activity生命周期的几个问题

每一个Android开发者都应该知道,android系统有四个重要的基本组件,即Activity(活动)、Service(服务)、Broadcast Receive(广播接收器)和Content Provider(内容提供器),其中,Activity是最重要的组件,打开你手机上的APP,你眼睛所能看到的都是Activity,下面将会介绍关于Activity生命周期的几个问题。

1 Activity生命周期的8个回调函数

下图是Activity的生命周期图,相信许多人都看过不止一次,但有的人是看到这张图时明白,过一段时间就记不清或者忘了,怎么才能完全理解并掌握呢?

其实很简单,只要记住下面两点就行:

(1)      Activity的6个回调函数onCreate()– onStart() – onResume() – onPause() – onStop() – onDestroy()可以分成三组,里边的onResume()和onPause()表示Activity是否在前台获得焦点,onStart()和onStop()表示Activity是否可见,最外边的onCreate()和onDestroy()表示Activity是否存在。OnRestart()函数在Activity第一次启动时并不会被调用,当Activity从onStop()不可见状态重新回到可见状态时会先调用onRestart(),再调用onStart(),除了这7个回调函数外,还有一个函数很重要,就是onSaveInstanceState(), 常常用它来保存Actitity的一些状态变量。

(2)      Activity正常启动后,都会停在onResume()函数之后,想象一下,你打开Android手机的APP,正在看某个Activity上面显示的内容,如果这个Activity打印出了调试信息并且你能够看到,那么大概信息就会如下图所示

你看Activity上面的内容时,Activity就会停在onResume函数之后。

2 Activity几个重要回调函数的说明

上面提到的Activity的8个回调函数,究竟哪些最重要呢?

onCreate()肯定是最重要的,IDE都会默认生成onCreate()函数,它会在Activity第一次被创建时调用,在onCreate()函数中会加载布局,初始化视图,绑定事件和其他的各种初始化操作,一个Activity的其他几个回调函数都有可能不被调用,但onCreate()一定会被调用,因为onCreate()里面往往内容很多,所以不要把所有代码都写到一起,这样不便于维护,而应该分成各种子函数,类似下面的方式:

protected voidonCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity);
                  f1();
                  f2();
                  f3();
                  ...
}

onPause()是离开Activity时调用的第一个方法,你在onPause()里应该保存一些重要数据,释放系统资源,因为只有onPause()_执行完后,下一个Activity才能正常运行,所以onPause()不能执行耗时操作。

onSaveInstanceState()常常被用作保存Activity临时的状态信息,在系统配置信息发生变化或者内存低导致重建Activity时,这个函数非常有用。比如我们在EditText输入的信息,在屏幕发生旋转时,信息就会丢失,这种情况,我们可以在onSaveInstanceState()保存用户输入的数据,然后在onCreate()或onRestoreInstanceState()进行恢复,后者更加方便一些,因为不需要进行Null值判断。

3 其他小问题

(1)      关于super.onCreate(savedInstanceState)

你会发现,每一个回调函数都会首先调用父类的回调函数,super.onX(),这个是必须的,如果不调用父类的回调函数,运行时应用会崩溃。

(2)      为什么没有看到Activity的构造函数

其实,你可以写Activity的构造函数,无参数的构造函数确实会在onCreate()之前执行,但构造函数实际上作用不大,系统会在Activity构造函数执行后创建上下文环境,然后再调用onCreate()函数,所有的初始化操作都应该放在onCreate()中。

(3) 什么时候只会调用onPause()而不会调用onStop()

onPause()表示Activity失去焦点,onStop()表示不可见,所以必须是Activity失去焦点但部分可见才能只调用onPause而不调用onStop(), 但并不是所有的失去焦点并部分可见就会调用onPause(), 如当前Activity产生的对话框,系统的关机对话框,音量对话框,都使当前Activity失去焦点,但都不会调用onPause()函数。

怎样才能调用onPause()而不调用onStop呢?可以新建两个Activity,用Activity1启动Activtiy2,把Activity2的主题设为

android:theme="@style/Theme.AppCompat.Dialog"

你就发现Activity1只会调用onPause()而不会调用onStop。

当你在Activity打开某个网址是,系统会弹出对话框,会有几个应用让你选泽,如UC浏览器或QQ浏览器等,此时,就只会调用onPause(),还没有调用onStop()。具体方法大家可以自己实验测试。

以上是Activity生命周期的几个问题,其他关于Activity的内容后面可以再讨论。

转载请注明出处

欢迎大家评论

时间: 2025-01-17 06:00:25

Android Activity生命周期的几个问题的相关文章

Android Activity生命周期 onSaveInstanceState和onRestoreInstanceState

当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候. 注意上面的双引号,何为"容易"?言下之意就是该activity还没有被销毁,而仅仅是一种可能性.这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清

Android Activity 生命周期的透彻理解

说来惭愧,虽然已经做了一年多的android开发,但是最近被人问起activity的生命周期的时候,却感觉自己并不能很自信很确定的回答对方的问题,对activity的生命周期的理解还不透彻啊.     既然发现了问题,那咱就得解决问题,不就个生命周期,能有多复杂. 首先看看android developers 网上的activity的生命周期图:      activity启动的时候:onCreate ---> onStart ---> onResume 这个过程不用多说,大家都知道.这里主要

Android Activity生命周期图解

Android 中 Activity生命周期 从网上摘的 事件回调方法  以下1-4 不可终止 . 1. onCreate()   :Activity 启动后第一个被调用的方法 ,常用来进行Activity的初始化,例如创建View.绑定数据或者恢复信息等 .. (? oncreate 可以恢复什么信息 ) 2. onStart() : 当Activity显示在屏幕上时,该方法被调用 3. onRestart() :当Activity从停止状态进入活动状态前,调用该方法 . 4.onResume

两分钟彻底让你明白Android Activity生命周期(图文)!

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: 1 public class Activity extends ApplicationContext { 2         protected void onCreate(Bundle savedInstanceState);        3       

Android——Activity生命周期(转)

Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方

Android Activity 生命周期

生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运

Android Activity生命周期

从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个activity处于活动状态 b.暂停状态  activity可视但失去焦点(被其它activity部分遮盖或者处于透明activiy下) c.停止状态  activity完全被另外一个activity遮挡,但保留用户状态信息d.非活动状态  activity尚未启动或者已经被手动终止或者由于内存不足

Android Activity生命周期以及Fragment生命周期的区别与分析

Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() onCreate() onCreateView() onActivityCreated() 2. 当这个fragment对用户可见的时候,它会经历以下状态. onStart() onResume() 3. 当这个fragment进入“后台模式”的时候,它会经历以下状态. onPause() onS

android --Activity生命周期具体解释

一. 再探Activity生命周期 为了研究activity的生命周期,简单測试代码例如以下. package com.example.testactivity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { private static fi