当前位置: 首页 > 科技观察

PausingandResumingActivityAndroid

时间:2023-03-13 13:56:08 科技观察

PausingandResuminganActivity(暂停和恢复活动)在正常应用中使用,前台Activity有时会被其他可视组件遮挡,导致Activity暂停。例如,当一个半透明活动打开时(例如在样式对话框中),前一个活动将暂停。只要Activity仍然部分可见,但当前未获得焦点,它就会保持暂停状态。但是,一旦Activity完全被隐藏并且对用户不可见,它就会停止(这将在下一课中介绍)。当您的Activity进入暂停状态时,系统会调用您的Activity的onPause()方法。在这个方法中,你可以停止在暂停状态期间不应该继续的行为(比如视频播放),或者持久化一些需要永久保存的信息,以便用户继续留在你的应用程序中。如果用户返回您的活动,系统会从暂停状态恢复它并调用onResume()方法。注意:当您的Activity收到对onPause()的调用时,这可能表明Activity将在用户返回您的Activity之前暂停一段时间。但是,这通常是用户离开您的活动的第一个迹象。图1.当半透明的activity覆盖你的activity时,系统调用onPause(),activity处于暂停状态(1)。如果用户返回到仍然挂起的活动,系统调用onResume()(2)。暂停你的活动(PauseYourActivity)当系统为你的活动调用onPause()时,从技术上讲,你的活动仍然是部分可见的,但最常见的是表明用户正在离开活动,它也会很快进入Stopped状态。您通常应该使用onPause()回调:停止动画效果或其他正在进行的CPU消耗行为。提交未保存的更改,但前提是用户想要处理这个:当他们离开时,他们需要干净地保存更改(例如撰写电子邮件)。释放一些系统资源,例如广播接收器、处理传感器(如GPS)或任何影响电池寿命的资源,同时您的活动已暂停且用户不再需要这些资源。例如,如果您的应用程序使用相机,onPause()方法是释放它的好地方。@OverridepublicvoidonPause(){super.onPause();//总是先调用超类方法//ReleasetheCamera因为我们不需要在暂停时编辑//和其他活动可能需要使用it.if(mCamera!=null){mCamera.release()mCamera=null;}}在一般来说,您不应该使用onPause()将用户的更改(例如个人信息输入表单)保存到持久存储中。仅当您确定用户希望自动保存更改(例如撰写电子邮件)时,才可以在onPause()方法中将用户的更改写入持久存储。但是,您应该避免在onPause()中执行CPU密集型工作,例如读取和写入数据库,因为它会减慢到下一个活动的转换(您应该在onStop()中执行重型关闭操作)。您应该使onPause()方法中的流量保持相对简单,以便在您的活动实际停止时允许快速过渡到用户的下一个目的地。注意:当您的Activity暂停时,Activity实例仍驻留在内存中,并在Activity恢复时再次调用。当您调用任何回调方法转换到恢复状态时,您不需要重新初始化已经创建的组件。恢复你的活动(ResumeYourActivity)当用户从暂停状态恢复你的活动时,系统会调用onResume()方法。请注意,每次您的活动进入前台时,系统都会调用此方法,包括首次创建时。因此,当你实现onResume()时,你应该初始化你将在onPause()中释放的组件,并执行每次activity进入resume状态时必须完成的初始化动作(如启动动画和在activity获得增益时初始化)以用户为中心。必需的组件)。下面的onResume()示例与上面的onPause()示例对应,因此它初始化在活动暂停时释放的相机。@OverridepublicvoidonResume(){super.onResume();//总是先调用超类方法//GettheCamerainstanceastheactivityachievesfulluserfocusif(mCamera==null){initializeCamera();//Localmethodtohandlecamerainit}}