android Activity的onPause()与onResume()
官方文档地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume
Pause和Resume一个Activity
在一般的app使用中,前台的activity通常是会被视觉组件所遮住的,这就会导致activity的pause。
举个样例,当一个半透明的activity打开的时候(就像某种形式的对话框一样)。这之前的activity会pause。仅仅要activity仍然部分可见,可是当下activity并不可操作,它就处在pause中了。
可是。一旦这个activity所有被遮住了,而且不可见。它就stop了。
(这会在下节课讨论到)
当你的activity进入pause状态的时候,这个系统调用了在activity中的onPause()这种方法,onPause ()这种方法让你可以结束一些正在进行的任务,而这些任务在停止的时候就不能继续了(比方一个视频)。它也可以让你在用户执意要离开你的app时。留存应该被永久保存的信息。假设用户从pause的状态又回到了你的activity。这个系统resume这个activity而且调用了onResume()这种方法。
注意:当你的activity收到了一个调用onPause()的请求,它可能表示这个activity将会被停止一段时间而且使用者非常可能会再次回到你的activity来。
可是这也非常可能表示着用户正在离开你的app。
图片:当一个半透明的activity遮住了你的activity,这个系统调用了onPause(),而且activity在pause的状态中等待。
假设用户当它仍然pause的时候再次回到了activity。这个系统会调用onResume()。
pause你的Activity
当这个系统为你的activity调用onPause()的时候。讲道理的话。它意味着你的activity仍然是部分可见的,可是也非常有可能表示是用户正在离开你的activity而且它之后将非常快进入stop的状态。
你应该常常会在下面情况下用到onPause()。
1、 结束占用CPU的动画或者其它正在执行任务。
2、 提交没有保存的改变。可是仅仅有在用户离开的时候希望这些改变被保存的时候。
3、 释放系统资源,就像广播接收者。对传感器的操纵(就像GPS),或者在acitivity被pause之后和用户不须要的时候,不论什么可能影响你电池寿命的资源。
举个样例,假设你的应用用到了camera,那么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()来把用户的改变存储到永久内存中的情况是。当你的某县用户须要自己主动化保存的时候(比方写一封email)。可是在onPause()中你应该避免运行占用大量CPU的工作,比方写入数据库。由于这会减慢你可视化转换到下一个activity的速度。
(你应该把这样的繁重的关闭操作放到onstop()中)
在onPause()方法中,你应该要保持一部分的操作。来保证你的activity结束的时候可以以较快的速度跳转到下一个用户目的地。
注意:当你的activity被pause的时候,这个activity实例在内存中是占用位置的,并且在Activity被resume的时候会被再次唤醒。你不须要在resume状态之前的不论什么回调函数中,又一次初始化不论什么已经被创建过的组件。
resume你的Activity
当用户从pause的状态resume你的activity的时候,系统调用了onResume()的函数。
考虑到系统每次进入前台运行的时候都会调用这个函数。即使是在这个activity已经被创建过的情况下。相同的你应该实现onResume()来初始化你在onPause()中释放的组件。而且而且运行一些其它在当activity进入resume状态的时候须要运行的初始化(比方打开动画,初始化仅仅有activity获取了焦点后才须要使用的组件)。
接下来的onResume()的样例是与onPause()在上面的样例相配的。所以它初始化了在activity被pause的时候须要释放的camera。
@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
}
}
android Activity的onPause()与onResume()的更多相关文章
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
原文:http://www.xuebuyuan.com/1608083.html 最近在研究Activity的启动流程,老罗的blog在看,也找了其它资料学习,也跟过Android4.3的源码, 在跟 ...
- android Activity启动过程(三)从栈顶Activity的onPause到启动activityon的Resume过程
ActivityStack.startPausingLocked() IApplicationThread.schudulePauseActivity() ActivityThread.sendMes ...
- android Activity启动过程(二)从ActivityManagerService的startActivity到栈顶Activity的onPause过程
ActivityManagerService.startActivity() ActvityiManagerService.startActivityAsUser() ActivityStackSup ...
- android Activity介绍
一般情况下,Android程序的流程都运行在activity中,activity具有自己的生命周期,由系统来控制.可以使用onSaveInstanceState()和onRestoreInstance ...
- Android Activity的生命周期简单总结
Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个 ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
- Android Activity的生命周期
一.为什么要了解Activity的生命周期 activity is directly affected by its association withother activities, its tas ...
- Android Activity生命周期详细解析
概况 讲Android Activity那怎么都绕不过这张图,这篇文章也是围绕这幅图详细分析. 背景 假设这是你的APP,以此为背景,下面的每个part请结合上图理解. #Case 1 当按下app启 ...
- xamarin Android activity生命周期详解
学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...
随机推荐
- C语言高级应用---操作linux下V4L2摄像头应用程序【转】
转自:http://blog.csdn.net/morixinguan/article/details/51001713 版权声明:本文为博主原创文章,如有需要,请注明转载地址:http://blog ...
- MyBatis报错 Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
修改 <update id="updateStatusById" parameterType="java.lang.Integer"> update ...
- [译]java9新特性:在接口中用pirvate方法让default(java8接口特性)更简练
Java8 带来了许多改变,其中之一就是default修饰的接口方法. 这些方法改变了我们已知的接口,现在我们能够在接口中定义默认实现方法.默认实现方法的不同之处在于,在接口中用default修饰抽象 ...
- Fiddler抓包8-打断点(bpu)【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神 ...
- 陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物【数学/k进制下x^n的位数/log】
链接:https://www.nowcoder.com/acm/contest/121/F来源:牛客网 题目描述 WWX的女朋友送给了他一个礼物,可是礼物却被一把K进制密码锁锁住了.在礼物盒上还有一张 ...
- poj2774(最长公共子串)
poj2774 题意 求两个字符串的最长公共子串 分析 论文 将两个字符串合并,中间插入分隔符,在找最大的 height 值的时候保证,两个字符串后缀的起始点分别来自原来的两个字符串. code #i ...
- 干净卸载mysql
一.在控制面板中卸载mysql软件 二.卸载过后删除C:\Program Files (x86)\MySQL该目录下剩余了所有文件,把mysql文件夹也删了 三.windows+R运行“regedit ...
- rsync + inotify 同步
1. 配置rysnc server:同步机,同步被同步机更新的文件,很多台vi /etc/rsyncd.conf uid=rootgid=rootuse chroot=nomax connection ...
- centos下crontab的使用
1.作用 使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户. 2.格式 crontab [-u user] {-l | -r ...
- Microsoft Office Excel 2007 使用笔记
1.显示表格边框: 选择要显示边框的单元格,点击“开始”选项卡中的“边框”图标,选中下拉框中的“所有框线” 2.单元格内,文字自动换行: 点击“开始”选项卡中的“自动换行”按钮 3.单元格内,文字手动 ...