Android Developer Training

Android Developer Training

5 (4人评价)

Stopping and Restarting an Activity的笔记

相关课时: 笔记详情:

关闭和重启应该在你的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

 

1 1

你感兴趣的课程

8万+浏览/ 917学员/ 4.5评分
免费
6万+浏览/ 177学员/ 5评分
免费
6万+浏览/ 973学员/ 4.8评分
免费