Android组件的生命周期

Activity

关于Activity的生命周期,是作为Android开发者最最基础的知识,我们来看下官方给出的一张图:


Android组件的生命周期_第1张图片
Activity生命周期

图上列出了Activity在切换生命周期中执行的主要方法:
OnCreate() -> OnStart() -> onResume() -> onPause() ->onStop() ->onDestroy()
我们一个一个来看:

Paste_Image.png
  • onCreate()
    Activity启动执行的第一个方法,主要用于初始化布局(调用setConteView)。
  • onStart()
    在onCreate() 后调用,如果该Activity为可见,则立刻调用onResume(),否则调用OnStop()。注意:从图中我们可以看到,从onStart() 到 onResume() 的时间非常短(毫秒级),故不推荐在该方法中执行某些耗时操作。
  • OnResume()
    该状态属于可见且可交互。此时Activity完全对用户可见。
  • OnPause()
    当前Activity可见性更改时调用。如(弹出对话框、back键返回、Home键返回等等)
  • OnStop()
    当前Activity完全不可见时调用,例如像弹出对话框就不会调用该方法。
  • OnDestroy()
    当Activity销毁时调用,像手动 (调用finish()),或者被系统回收内存时调用。

Service

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

Android组件的生命周期_第2张图片
Service生命周期

服务的 整个生命周期从调用 onCreate()开始起,到 onDestroy()返回时结束。与 Activity 类似,服务也在 onCreate() 中完成初始设置,并在 onDestroy()中释放所有剩余资源。

  • 启动服务(对应上图左边,通过startService()启动)
    当用户通过startService()启动服务,目标Service会调
    OnCreate()->onStartCommand(),此后该Service会一直处于活动状态,即使调用startService()的Activity被销毁,直到调用stopSelf()stopService()来停止。如果这时候用户再调用startService(),该Service会直接调用onStartCommand()而不经调用OnCreate()
Android组件的生命周期_第3张图片
Paste_Image.png
Android组件的生命周期_第4张图片
Paste_Image.png
  • 绑定服务(通过调用bindService()启动服务)
    绑定服务:bindService()
    Service调用:onCreate()->onBind()
    解绑服务:unbindService()
    Service调用:onUnbind()->onDestroy()
    当绑定服务组件(调用bindService()的主体)销毁时,其绑定的Service会自动调用onUnbind()->onDestroy()

Android组件的生命周期_第5张图片
Paste_Image.png

当同时调用 startServicebindService时:

Android组件的生命周期_第6张图片
Paste_Image.png

从图中可知,当同时调用两个方法时,单单销毁Activity不足以销毁Service,还必须手动调用 stopService

BroadcastReceiver

BroadcastReceiver(对象)的生命周期始于onReceive调用,终止时期与注册方式有关
  • 静态注册
    在配置清单AndroidManifest中通过receiver注册,如:
....

    

其中TestReceiver继承于BroadcastReceiver。
当我们调用sendBroadcast()发送广播时,对应的BroadcastReceiver会调用onReceive()方法,当此方法执行完后,该BroadcastReceiver对象就被回收了。

Android组件的生命周期_第7张图片
Paste_Image.png

  • 动态注册
    动态注册是通过代码注册广播
...
String action = "action";     //定义Action
 IntentFilter intentFilter = new IntentFilter(action); //定义接收规则
//注册广播,将Action与TestReceiver() 绑定。
 registerReceiver(new TestReceiver(),intentFilter); 
...
Intent intent = new Intent();
intent.setAction(action)
sendBroadcast(intent);  //发送广播

Android组件的生命周期_第8张图片

看图,通过动态注册的广播只生成一个BroadcastReceiver(我们调用 registerReceiver时传入的对象),当注册广播的Activity被销毁或调用unregisterReceiver时,该BroadcastReceiver同时被回收,这意味着当某个Activity发送广播时,会出现无法接收的结果,所有动态注册的BroadcastReceiver受注册者的生命周期的限制。

以上就是本文内容,如有错误,请指出。

你可能感兴趣的:(Android组件的生命周期)