android study 12-lifecycle

Author Avatar
Xzhah 7月 23, 2022
  • 在其它设备中阅读本文章

生命周期

1. Activity生命周期

Activity生命周期图如下:

1.1 Activity状态

Activity只有三种状态可以长期保持,其他状态都是过渡作用。

1)运行状态(Resumed):

​ 当前Activity在最上方,用户可以与它进行交互。也就是running状态。此状态由onResume进入,onPause退出。

2)暂停状态(Paused):

​ 当前Activity仍然可见,但是在最上方的是其他Activity,最上方的activity是半透明的,或者是部分覆盖整个屏幕。被暂停的activity不会再接受用户的输入。

​ 该Activity仍然处于活着的状态,Activity对象存留在内存,保持着所有的状态和成员信息,仍然吸附在window manager

​ 当处于低内存状态时,系统会杀掉该进程,释放空间。

​ 此状态由onPause进入,可能由onResume或者onCreate重新唤醒,或者被onStop结束。

3)停止状态(Stopped)

​ 当前activity处于后台,完全不可见

​ 处于活着的状态,资源和状态仍然保留,不再吸附在window manager

​ 只要有内存需要,系统就会清理该Activity以释放资源

​ 该状态由onStop进入。由onReStart或者onCreate重新唤醒。或者onDestroy彻底结束。

1.2 额外的相关方法

onSaveInstanceState:当Activity停止时,系统会调用该方法,可以把状态信息保存到实例状态Bundle中,此方法的默认实现保存有关 Activity 视图层次结构状态的瞬时信息,例如 EditText 微件中的文本或 ListView 微件的滚动位置。

​ 重建先前被销毁的 Activity 后,可以从系统传递给 Activity 的 Bundle 中恢复保存的实例状态。onCreate()) 和 onRestoreInstanceState()) 回调方法均会收到包含实例状态信息的相同 Bundle

​ 因为无论系统是新建 Activity 实例还是重新创建之前的实例,都会调用 onCreate()) 方法,所以在尝试读取之前,必须检查状态 Bundle 是否为 null。如果为 null,系统将新建 Activity 实例,而不会恢复之前销毁的实例。

onRestoreInstanceState:在onStart后调用,也是回复状态目的。

2. Service生命周期

Service生命周期图如下:

2.1 启动方式

​ service有两种启动方式,不同的方式决定了Service具有两种生命周期。

​ 1.start方式:onCreate -> onStartCommand。onDestroy释放资源

​ 2.bind方式:onCreate -> onBind。需要相关的client调用unbindServie()后才能释放资源:onUnBind(),onDestroy。

​ Service 的生命周期比 Activity 的要简单很多。但关注其如何创建销毁反而更加重要,因为服务可以在用户没有意识到的情况下在后台运行。

​ Service 的生命周期可以遵循两条不同的途径:

  • 启动服务
    该服务在其他组件中调用 startService()) 时创建,然后无限运行,必须通过 stopSelf()) 来自行停止运行。此外,其他组件也可以通过调用 stopService()) 来停止服务。服务停止后,系统会将其销毁。

  • 绑定服务
    该服务在另一个组件(客户端)调用 bindService()) 时创建。然后客户端通过 IBinder 接口与 Service 进行进行通信。客户端可以通过调用 unbindService()) 来关闭连接。多个客户端可以绑定到相同服务,而且当所有绑定全部取消后,系统会销毁该服务。(不必调用 stopService()) 来停止服务)

    这两种方式是可以共存的,比如使用startService启动后台播放音乐,随后用户想要加入控制播放器获取歌曲信息,Activity就可以通过bindService绑定服务获取信息。