暂停和重启一个Activity
在通常的app使用过程中,前台运行的Activity在某些时候会被其它的可视化组件阻塞导致这个Activity暂停。例如,当某个半透明的Activity打开(比如某种对话框),则之前那个Activity就会被暂停。只要这个Activity仍然是部分可见的,但是当前不是获得焦点的,它就一直保持paused状态。
但是,一旦这个Activity完全被阻塞并且不可见,它就停止了(这个将在下一课中讨论)。
当你的Activity进入暂停状态,系统就在你的Activity上调用onStop()方法,这允许你停止一些正在进行的动作,这些动作在暂停的时候不应该继续(例如播放视频)或者持久化任何信息,这些信息在用户继续离开app时应该永久保存的。如果用户在暂停的状态下重新回到你的Activity,系统会重新启动它并调用onResume()方法。
注意:当你的Activity收到一个onPause()调用,这可能表示你的Activity将会暂停一段时间然后用户可能会重新回来关注你的Activity。然而,这通常是第一个指示,用户正在离开你的Activity。
暂停你的Activity
当系统为你的Activity调用onPause()方法时,它技术上的意思是你的Activity仍然是部分可见的,但是它更通常是用户正在离开你的Activity并且马上就要进入停止状态的暗示。你通常应该使用onPause()回调来做如下动作:
- 停止动画或其他正在进行的会消耗CPU的动作
- 提交没有保存的配置,但只是那些用户期望在他们离开时被永久保存的变更(比如电子邮件的草稿)
- 当你的activity被暂停时,释放系统资源,例如广播接收者(broadcast receiver)、传感器的处理(比如GPS),或者其他任何有可能影响电池使用寿命的资源,用户并不需要它们。
例如,你的应用程序使用了摄像头,onPause()方法是一个好地方来释放它。
@Override public void onPause() { super.onPause(); // Always call the superclass method first // Release the Camera because we don't need it when paused // and other activities might need to use it. if (mCamera != null) { mCamera.release() mCamera = null; } }
通常,你不应该用onPause()方法来存储用户变更(比如个人信息存储到表格中)到永久性存储介质中。你唯一的应该在onPause()方法中保存用户变更到永久性存储介质中的时机是用户期望这些变更被自动保存的(比如起草一封电子邮件的时候)。然而,你应该避免在onPause()期间执行CPU密集型工作,比如写数据库,因为这会减慢视图切换到下一个Activity的速度(作为代替,你应该在onStop()期间执行重负载的关闭工作)。你应该保持在onPause()方法期间完成的操作量相对简单,允许快速切换到用户的下一个目标Activity,如果你的Activity实际正在被停止的话。
注意:当你的Activity暂停的时候,Activity实例可以保存在内存中,当Activity重新启动后被唤回。你不需要重新初始化那些在Resumed状态之前其他回调函数期间创建的组件。
重新启动你的Activity
当用户从暂停状态重新启动你的Activity,系统调用onResume()方法。
要知道每次你的Activity来到前台的时候系统都会调用这个方法,包括当它第一次被创建时。同样的,你应该实现onResume()方法来初始化那些在onPause()方法中释放的组件,并且执行一些其他初始化,那些每次Activity进入Resumed状态都需要做的(比如开始动画和初始化那些只在Activity获得用户关注时使用的组件)。
下面的onResume()的例子是和上面的onPause()例子是配对的,因此它初始化在暂停时被释放的摄像头。
@Override public void onResume() { super.onResume(); // Always call the superclass method first // Get the Camera instance as the activity achieves full user focus if (mCamera == null) { initializeCamera(); // Local method to handle camera init } }
相关推荐
例如,一个记事本应用可能会在onStop()中保存当前的草稿笔记,确保即使应用被关闭,用户的工作也不会丢失: ```java @Override protected void onStop() { super.onStop(); // 总是先调用父类方法 // 保存笔记的...
- **暂停(Paused)**: 当另一个Activity部分覆盖当前Activity,如弹出一个透明或半透明对话框,会调用`onPause()`。此时,Activity仍然可见,但不能接收用户输入。 - **停止(Stopped)**: 当Activity完全被遮挡...
Fragment有自己的生命周期,可以在Activity中添加、移除或替换,这使得开发者可以在不重启Activity的情况下动态改变界面内容。 Activity是Android应用的主要组件,它是用户与应用交互的入口点。一个Activity通常...
4. **暂停(Paused)**:当Activity被另一个透明或半透明的Activity覆盖,或者用户打开一个对话框时,`onPause()`会被调用。在这个阶段,Activity仍然可见,但用户不能与其交互。 5. **停止(Stopped)**:如果...
实验代码通常会通过不同的按钮或者点击事件来启动不同的Activity,并通过Logcat输出信息来追踪Activity的生命周期变化,如创建、重启、暂停、恢复等状态。 1. **标准模式实验**:创建两个Activity,点击按钮启动第...
4. 暂停:当另一个Activity覆盖了当前Activity的部分或全部,例如弹出一个对话框,会调用`onPause()`。此状态下,Activity仍然可见,但用户不能与其交互。 5. 停止:如果Activity被完全遮挡,或者系统资源紧张,...
当一个Activity启动另一个Activity时,新的Activity会被压入一个回退栈(back stack)。用户可以通过点击设备的回退键或者调用finish()方法,按照后进先出的顺序回退到之前的状态。 七、配置变更与Activity重启 当...
当Activity被创建、启动、暂停、停止、重启或销毁时,系统会调用相应的回调方法。这些方法包括: - `onCreate()`: 当Activity第一次被创建时调用。 - `onStart()`: 当Activity对用户可见时调用。 - `onResume()`: ...
例如,当用户离开一个Activity,系统可能会暂停或销毁它来释放资源。在系统内存紧张时,甚至可能销毁整个应用。 2. **正常重启**:在编程中,我们可以通过调用`finish()`方法关闭当前Activity,然后在合适的时候...
一个Activity代表一个屏幕上的交互界面,例如登录界面、主菜单等。通过多个Activity的组合,可以构建出功能丰富的应用程序。 #### Activity的生命周期 Activity的生命周期是指Activity从创建到销毁的过程,主要包括...
当应用发生崩溃时,管理器可以捕获异常,记录相关信息,并决定是否重启Activity或者整个应用,以提供更好的用户体验。 最后,对于多语言和多配置支持,自定义管理器可以在配置变更时处理Activity的重新创建,确保...
如果另一个Activity覆盖了当前Activity,它将进入Paused状态,接着完全被遮挡则进入Stopped状态。当Activity不再需要时,系统会调用`onDestroy()`方法进行清理工作。 2. 主Activity 主Activity是程序的入口点,...
这是Activity生命周期的第一个回调方法,通常在这里设置UI和执行一次性初始化操作。 2. 可见(启动): - onStart():当Activity变得对用户可见时调用,但可能仍然被其他Activity遮挡。在这个阶段,Activity开始...
- **暂停(Paused)**:当Activity部分被遮挡,例如弹出一个透明或半透明对话框,会调用`onPause()`。此时,Activity仍然可见,但用户与它的交互减少。 - **停止(Stopped)**:如果Activity完全被遮挡,如新...
在这个项目中,你将找到一个完整的Activity生命周期演示,包括详细的代码实现和易于理解的注释,可以直接导入工程运行查看效果。 Activity的生命周期主要由以下几个关键状态构成: 1. **创建(Creation)**: - *...
- 提升用户体验:确保在恰当的时机保存和恢复Activity的状态,使得用户在切换或重启Activity时感觉流畅自然。 - 支持后台任务:在Activity暂停或停止时,可以暂停不必要的后台任务,减少电池消耗。 - 保证数据一致性...
在这个例子中,我们创建了一个名为`LifeCycleActivity`的`Activity`类,并在每个生命周期回调方法中记录了日志消息。这样可以帮助开发者跟踪`Activity`的生命周期状态变化,并据此调整代码逻辑。 总结来说,理解`...
- onStart():Activity变得对用户可见时调用,但可能不完全占据屏幕(例如,当一个透明Activity覆盖在它上面时)。 - onResume():Activity完全可见并处于活动状态,用户可以直接与其交互。 - onPause():当Activity...
通过以上步骤,我们可以创建一个具备暂停和恢复功能的倒计时器,极大地提升了用户体验。在实际项目中,还可以结合SharedPreferences存储用户的计时器状态,以便在应用重启后恢复之前的倒计时。此外,为了提高代码的...
4. **暂停(Paused)**:当另一个Activity(如透明或部分透明的对话框)覆盖在当前Activity上时,会调用`onPause()`。虽然Activity仍部分可见,但大部分操作(如触摸事件)会被新Activity截取。 5. **停止(Stopped...