Activity
关于Activity的生命周期,是作为Android开发者最最基础的知识,我们来看下官方给出的一张图:
Activity生命周期
图上列出了Activity在切换生命周期中执行的主要方法:
OnCreate() -> OnStart() -> onResume() -> onPause() ->onStop() ->onDestroy()
我们一个一个来看:
- onCreate()
Activity启动执行的第一个方法,主要用于初始化布局(调用setConteView)。 - onStart()
在onCreate() 后调用,如果该Activity为可见,则立刻调用onResume(),否则调用OnStop()。注意:从图中我们可以看到,从onStart() 到 onResume() 的时间非常短(毫秒级),故不推荐在该方法中执行某些耗时操作。 - OnResume()
该状态属于可见且可交互。此时Activity完全对用户可见。 - OnPause()
当前Activity可见性更改时调用。如(弹出对话框、back键返回、Home键返回等等) - OnStop()
当前Activity完全不可见时调用,例如像弹出对话框就不会调用该方法。 - OnDestroy()
当Activity销毁时调用,像手动 (调用finish()),或者被系统回收内存时调用。
Service
服务的生命周期比 Activity 的生命周期要简单得多。但是,密切关注如何创建和销毁服务反而更加重要,因为服务可以在用户没有意识到的情况下运行于后台。
Service生命周期服务的整个生命周期从调用onCreate()开始起,到onDestroy()返回时结束。与 Activity 类似,服务也在onCreate() 中完成初始设置,并在onDestroy()中释放所有剩余资源。
- 启动服务(对应上图左边,通过startService()启动)
当用户通过startService()启动服务,目标Service会调
OnCreate()->onStartCommand(),此后该Service会一直处于活动状态,即使调用startService()的Activity被销毁,直到调用stopSelf()或stopService()来停止。如果这时候用户再调用startService(),该Service会直接调用onStartCommand()而不经调用OnCreate()。
- 绑定服务(通过调用bindService()启动服务)
绑定服务:bindService()
Service调用:onCreate()->onBind()
解绑服务:unbindService()
Service调用:onUnbind()->onDestroy()
当绑定服务组件(调用bindService()的主体)销毁时,其绑定的Service会自动调用onUnbind()->onDestroy()。
当同时调用startService与bindService时: Paste_Image.png
从图中可知,当同时调用两个方法时,单单销毁Activity不足以销毁Service,还必须手动调用stopService。
BroadcastReceiver
BroadcastReceiver(对象)的生命周期始于onReceive调用,终止时期与注册方式有关
- 静态注册
在配置清单AndroidManifest中通过receiver注册,如:
....
<application
.....
<receiver android:name=".TestReceiver"/>
</application>
其中TestReceiver继承于BroadcastReceiver。
当我们调用sendBroadcast()发送广播时,对应的BroadcastReceiver会调用onReceive()方法,当此方法执行完后,该BroadcastReceiver对象就被回收了。
- 动态注册
动态注册是通过代码注册广播
...
String action = "action"; //定义Action
IntentFilter intentFilter = new IntentFilter(action); //定义接收规则
//注册广播,将Action与TestReceiver() 绑定。
registerReceiver(new TestReceiver(),intentFilter);
...
Intent intent = new Intent();
intent.setAction(action)
sendBroadcast(intent); //发送广播
看图,通过动态注册的广播只生成一个BroadcastReceiver(我们调用registerReceiver时传入的对象),当注册广播的Activity被销毁或调用unregisterReceiver时,该BroadcastReceiver同时被回收,这意味着当某个Activity发送广播时,会出现无法接收的结果,所有动态注册的BroadcastReceiver受注册者的生命周期的限制。
以上就是本文内容,如有错误,请指出。
网友评论