KyYoung

班级

TA还未加入任何班级

课程

3万+浏览/ 204学员/ 5评分
财务 会计基础
2万+浏览/ 2035学员/ 4.3评分

笔记

来自Stopping and Restarting an Activity(1)

关闭和重启应该在你的Activity当中是一个很重要的流程,因为它或许让你的用户感觉到你的app总是活跃的并且不会失去他们的进展。下面介绍一些你的Activity会关闭和重启时主要情况:当用户打开最近使用app窗口,并且从你的app转到使用另一个app。你的app中当前在前台运行的Activity会被stop。如果用户从主界面或最近使用app窗口上点击你的app的图标,那么,那些被stop的Activity会重新启动。当用户在你的app中执行开启一个新的Activity的操作,当前的Activity会被stop。如果用户点击返回按钮,那么,被stop的 Activity会被重启。当用户在使用你的app时接到一个电话。Activity类提供了两种生命周期方法,分别是 onStop()和onRestart(),这两种方法让你能够准确地编写你的Activity崽遇到stopped和restarted的情况时,该如何操作。不同于paused状态的是,stopped状态必须保证当前Activity的用户界面完全不可见,并且用户焦点在另一个单独的Activity(或者一个完全单独的app),而paused状态只需要识别到当前的用户界面被局部遮掩。注解:因为当你的Activity被stop时,系统会保留你的Activity的实例,所以,或许你不需要实现onStop() 和onRestart() 方法(甚至onStart()方法也不必实现。因为大多数Activity比较简单,你只需要使用onPause()方法来暂停进行中的活动和从系统资源断开)图Figure 1. 当用户退出你的Activity,系统会调用onStop()方法来关闭Activity(1)。之后,如果用户返回你的Activity,系统调用onRestart()方法(2),紧接着调用onStart()方法(3),再接着调用onResume() 方法(4)。于是我们注意到,无论是什么情况让Activity关闭,系统总是先调用onPause()方法,再调用onStop()方法来关闭Activity。Stop Your Activity当你的Activity调用onStop()方法时,那么,它就不再可见,并且释放此时用户不需要用到的所有资源。一旦你的Activity处于stopped状态,如果当系统需要恢复系统内存时,系统可能会销毁你的Activity中的实例。在极端情况下,系统甚至会在 without calling the activity's final onDestroy() callback的情况下直接终止你的应用进程。因此,调用onStop()方法来释放资源是非常重要的。虽然onPause()方法在onStop()方法之前调用,但是你应该在onStop()方法中去执行较大的,较占用CPU性能的操作,比如写入数据库操作就应该在onStop()中执行。举个例子,下面这个onStop()方法实现了将草稿内容持久性的存储:代码当你的Activity被是stop,你的Activity对象被保存在内存中,并且当它resumes时,它会被召回。You don’t need to re-initialize components that were created during any of the callback methods leading up to the Resumed state. 系统也会跟踪layout中每个View的当前状态,所以,如果用户输入文本到文本框中,内容会被保留,因此你不需要主动保存和恢复它。Note:即使当你的Activity处于stopped状态时,系统销毁了它,它仍然将View对象(比如EditText中的文本内容)的状态保留在Bundle里(一个bolb键值对),并且在用户导航回你的Activity的相同的实例时会被恢复。(下一节课程将会讲到更多关于使用Bundle来存储其他状态的数据来以防万一你的Activity被销毁和重新创建)Start/Restart Your Activity 

来自Starting an Activity(0)

for an extended period of time持续一段较长的时间

来自Pausing and Resuming an Activity(0)

Resume Your Activity当你的Activity从Paused恢复到Resumed状态时,系统会调用onResume()方法。要知道的是,每当系统调用这个方法时,你的Activity都会来到前台运行,包括activity被第一次创建时。同样地,你应该在onResume()方法中初始化你在onPause()方法中释放掉的组件,并且执行每次进入这个Activity时所必须出现的内容(比如进入时的动画和只有在获取用户焦点时初始化的组件)。下面这个onResume()的例子与上面的onPause() 的例子相对应,因此,它初始化了在onPause() 中释放的camera。 

留言

功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。