博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Activity的onPause()与onResume()
阅读量:5923 次
发布时间:2019-06-19

本文共 2306 字,大约阅读时间需要 7 分钟。

官方文档地址:

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()方法是一个非常好的释放它的方法。

 

@Overridepublic 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。

@Overridepublic 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    }}

你可能感兴趣的文章
Spring的IOC原理
查看>>
JavaScript 正则表达式对象RegExp test方法慎用/g
查看>>
达观数据:文本大数据的机器学习自动分类方法
查看>>
帮助你生成分享和显示社交媒体网络按钮的jQuery插件 - #50C1AL
查看>>
华为:浮动静态路由
查看>>
Cisco ASA 5505配置详解
查看>>
【大数据干货】轻松处理每天2TB的日志数据,支撑运营团队进行大数据分析挖掘,随时洞察用户个性化需求。...
查看>>
专访佰腾科技大数据团队,谈专利大数据领域的挑战与实践
查看>>
聊聊springboot2的ScheduledTasksEndpoint
查看>>
dubbo 异步调用
查看>>
一分钟完成MySQL5.7安装部署
查看>>
关于CentOS 7 链路聚合的一些见解
查看>>
Vue.js 2.0 由浅入深,第五天 day05
查看>>
docker/github
查看>>
“格力手机”的蝴蝶效应
查看>>
DIY 空气质量检测器
查看>>
persistence.xml配置实例
查看>>
Linux文件、目录、软硬链接
查看>>
还记得《非诚勿扰》葛大爷的“分歧终端机”吗?迅雷链帮他实现了
查看>>
将postfix收发邮件记录到mysql
查看>>