写在前面: 写这篇文章,主要的目的是为了理清下自己的思路,服务好自己的同时,更好的服务于大家。
我们需要注意的应该是,我们在什么时候用哪个生命周期回调方法做什么事情。
印象笔记地址,点击
不像其他编程范式一样:程序从main()方法开始启动。Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码。系统存在启动与销毁一个activity的一套有序的回调函数。
Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。—By Google
Activity 基本上以三种状态存在:
-
继续/运行
- 此 Activity 位于屏幕前台并具有用户焦点。(有时也将此状态称作“运行中”。)
-
暂停
- 另一个 Activity 位于屏幕前台并具有用户焦点,但此 Activity 仍可见。也就是说,另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。 暂停的 Activity 处于完全活动状态(Activity 对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。
-
停止
- 该 Activity 被另一个 Activity 完全遮盖(该 Activity 目前位于“后台”)。 已停止的 Activity 同样仍处于活动状态(Activity 对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。 不过,它对用户不再可见,在别处需要内存时可能会被系统终止。
- 如果 Activity 处于暂停或停止状态,系统可通过要求其结束(调用其 finish() 方法)或直接终止其进程,将其从内存中删除。(将其结束或终止后)再次打开 Activity 时,必须重建。
生命周期图(经简单翻译后):
生命周期方法详解
onCreate()
执行“全局”状态设置(例如定义布局),创建视图、将数据绑定到列表等等。
应该在实现内初始化 Activity 的必需组件。
最重要的是,您必须在此方法内调用 setContentView(),以定义 Activity 用户界面的布局。
onRestart()
在 Activity 已停止并即将再次启动前调用。 始终后接 onStart()。
onStart()
可见。
onResume()
可与用户交互。
onPause()
通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。
做一些必要的操作,比如你想存储一些数据到数据库,以方面第二个界面Activity调用,则应在 onPause() 而不是 onStop() 执行期间向数据库写入数据。
onStop()
不可见/隐藏。
onDestroy()
释放所有资源。
答疑
1
Android Studio
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
据说在一个APP里面没有主Activity入口,程序安装后,手机程序列表上会没有应用的那么在设备的主界面列表里面不会呈现你的app图标。这个我还真没有测试出来,因为删掉后,智能的Android Studio不给运行。Eclipse待测~~~
2
也有网上说,如果直接finish,其会直接调用ondestroy方法,不会调用onPause,onStop,经我测试,分情况,如果是在生命周期回调里直接finish,比如onCreate,那就会直接调用ondestroy方法,如果是在onstart里, 会调用onStop,在调用ondestroy,如果是在onResume里finish, 还是会调用onPause,onStop,最后 调用ondestroy 。如果在其它方法里面调用的话,比如按钮点击finish,也还是会调用onPause,onStop。
3
需要特别注意: 一个activity跳转到另一个activity(完全覆盖),自身先只调用onPause,等第二个activity生命周期进入运行状态了,它才会调用自身的onStop方法(注意,如果没有完全遮挡,不会调用onStop)。所以在这里需要注意的是,不管在哪个activity里,onPause都不能执行太耗时的操作,不然会延缓跳转页面的打开,同理,可以在onStop方法里执行善后操作。
4
onSaveInstanceState、onRestoreInstanceState方法并不属于Android的生命周期回调方法,需要理清。
-
onRestoreInstanceState
-
其执行一般在onStart之后,onResume之前。
-
调用时机:它并不是与 onSaveInstanceState成对出现,它出现的时机是activity被系统销毁了( 人为的不算 ),在创建时会调用。
-
-
onSaveInstanceState
-
其执行一般在onPause之后,onStop之前。
-
调用时机:如果是要销毁当前activity,它不会调用。跳转到另一个activity会调用;跳转到桌面会调用;在跳转到一个没有完全覆盖的activity(透明、半透明)时,也会调用onSaveInstanceState,但不会调用onStop,因为其处在暂停状态;横竖屏切换时会调用。
-
5
保存Activity的状态
当系统为了恢复内存而销毁某项 Activity 时,Activity 对象也会被销毁,因此系统在继续 Activity 时根本无法让其状态保持完好,而是必须在用户返回 Activity 时重建 Activity 对象。但用户并不知道系统销毁 Activity 后又对其进行了重建,因此他们很可能认为 Activity 状态毫无变化。 在这种情况下,您可以实现另一个回调方法对有关 Activity 状态的信息进行保存,以确保有关 Activity 状态的重要信息得到保留:onSaveInstanceState()。
系统会先调用 onSaveInstanceState(),然后再使 Activity 变得易于销毁。系统会向该方法传递一个 Bundle,您可以在其中使用 putString() 和 putInt() 等方法以名称-值对形式保存有关 Activity 状态的信息。然后,如果系统终止您的应用进程,并且用户返回您的 Activity,则系统会重建该 Activity,并将 Bundle 同时传递给 onCreate() 和 onRestoreInstanceState()。您可以使用上述任一方法从 Bundle 提取您保存的状态并恢复该 Activity 状态。如果没有状态信息需要恢复,则传递给您的 Bundle 是空值(如果是首次创建该 Activity,就会出现这种情况,所以如果要从Bundle取值的话,建议在 onRestoreInstanceState() ,因为其被调用时,Activity百分百被销毁了,所以Bundle不会为空,否则在onCreate()里还要判断是否为空)。
如果你什么都不做
不过,即使您什么都不做,也不实现 onSaveInstanceState(),Activity 类的 onSaveInstanceState() 默认实现也会恢复部分 Activity 状态。具体地讲,默认实现会为布局中的每个 View 调用相应的 onSaveInstanceState() 方法,让每个视图都能提供有关自身的应保存信息。Android 框架中几乎每个小部件都会根据需要实现此方法,以便在重建 Activity 时自动保存和恢复对 UI 所做的任何可见更改。例如,EditText 小部件保存用户输入的任何文本,CheckBox 小部件保存复选框的选中或未选中状态。您只需为想要保存其状态的每个小部件提供一个唯一的 ID(通过 android:id 属性)。如果小部件没有 ID,则系统无法保存其状态。(所以我认为,在有数据的UI控件里都需要提供一个唯一的 ID,显示UI看情况)
由于 onSaveInstanceState() 的默认实现有助于保存 UI 的状态,因此如果您为了保存更多状态信息而替换该方法,应始终先调用 onSaveInstanceState() 的超类实现,然后再执行任何操作。 同样,如果您替换 onRestoreInstanceState() 方法,也应调用它的超类实现,以便默认实现能够恢复视图状态。
相关推荐
Activity生命周期是Android开发中至关重要的一环,因为它决定了应用如何响应用户操作和系统事件。理解Activity的生命周期对于编写高效、稳定且用户体验良好的应用至关重要。 Activity的生命周期由多个关键状态组成...
Android中的Activity生命周期是每个Android开发者必须深入理解的关键概念。它涉及到Activity从创建到销毁的整个过程,以及在不同用户交互和系统状态变化时如何响应。本文将详细解析Activity的生命周期,并通过实例...
本文将深入探讨Android Activity的生命周期,并通过具体的例子来帮助开发者更好地理解这一核心概念。 Android Activity的生命周期包括以下几个主要状态: 1. **初始化态(Created)**: 当Activity首次被创建时,会...
### Android Activity 生命周期详解 #### 一、概述 在Android开发中,`Activity`是四大组件之一,用于构建用户界面,并负责与用户的交互。一个`Activity`通常对应着一个屏幕,当用户在一个应用的不同屏幕间导航时...
Android开发教程_016_Activity生命周期_标清
本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...
首先,Activity的生命周期是Android系统管理组件的核心机制,它包括了创建、启动、暂停、恢复和销毁等几个关键状态。每个状态的变化都对应着特定的方法调用,如`onCreate()`, `onStart()`, `onResume()`, `onPause()...
在这个场景中,“Activity_Callback.rar_Callback android_activity Callback_android”标题提及的焦点是Android活动(Activity)中的回调功能。让我们深入探讨这个主题。 Android Activity是应用的核心组件,用于...
例如,使用FLAG_ACTIVITY_NEW_TASK标志启动的Activity会创建一个新的Task,而FLAG_ACTIVITY_SINGLE_TOP则表示如果目标Activity已经在栈顶,那么不会创建新的实例,而是调用其`onNewIntent()`方法。 在ExmActLife这...
Android Activity 生命周期 Android Activity 生命周期是指 Activity 从创建到销毁的整个过程,该过程中会经历多个状态变化,每个状态变化都会触发相应的回调方法。理解 Activity 生命周期是 Android 开发的基础。 ...
Activity的生命周期是Android开发者必须深入理解的关键概念,因为它直接影响到应用的性能、内存管理和用户体验。本文将详细探讨Android Activity的生命周期,并通过源码分析和工具辅助来深化理解。 一、Activity...
有助于深入了解Android Activity生命周期的测试代码,可以结合博客http://blog.csdn.net/freetangxiaoying/article/details/17167819领悟。
setContentView(R.layout.activity_main); } ``` #### 2. onStart() 当Activity由不可见变为可见状态时调用此方法,即从停止状态变为启动状态。在此之后,Activity对用户来说是可见的,但不一定处于活跃状态...
理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4种启动模式。 **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下...
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...
本实验报告将深入探讨Android应用程序,尤其是Activity、Service和Intent Receiver的生命周期,并解释如何正确管理这些组件以避免不必要的进程销毁。 首先,Android应用通常在独立的Linux进程中运行。当应用需要...
每个Activity都有一个生命周期,包括创建、启动、暂停、恢复和销毁等状态。理解Activity的生命周期对于管理和优化应用性能至关重要。 2. 创建Activity: 创建Activity首先需要在AndroidManifest.xml文件中声明,...
实验一 第一个Android程序和Activity生命周期。实验要求: 1.用工程向导生成第一个Android程序,并在模拟器上运行 注意在新建应用的选择SDK版本时选API 18 2.熟悉Android应用程序的基本文件结构 3.了解使用开发环境...
Android Activity生命周期演示源码,从第一个Activity到第二个Activity,Android Activity形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的。