专栏名称: cpp软件开发团队
C++软件开发团队成立于2014年1月,由信息学院院长谢仕义带领,至今为止已成立一年多,主要由大二、大三的学生组成。 团队时刻关注着软件的最新技术以及软件市场对人才需求,在学校中开发外界企业的软件,作为企业与学校的人才桥梁。
目录
相关文章推荐
龙船风电网  ·  350MW!3个风电项目中标公示 ·  2 天前  
中国电建  ·  王斌与中国建研院总经理樊金龙举行会谈 ·  3 天前  
中国电建  ·  “圆”满!南非最大塔式光热电站首并成功 ·  4 天前  
51好读  ›  专栏  ›  cpp软件开发团队

Android组件的生命周期

cpp软件开发团队  · 公众号  ·  · 2017-05-01 10:26

正文

Activity

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


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


Service生命周期


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

  • 启动服务(对应上图左边,通过startService()启动)
    当用户通过startService()启动服务,目标Service会调
    OnCreate()->onStartCommand(),此后该Service会一直处于活动状态,即使调用startService()的Activity被销毁,直到调用stopSelf()stopService()来停止。如果这时候用户再调用startService(),该Service会直接调用onStartCommand()而不经调用OnCreate()


Paste_Image.png


Paste_Image.png

  • 绑定服务(通过调用bindService()启动服务)
    绑定服务:bindService()
    Service调用:onCreate()->onBind()
    解绑服务:unbindService()
    Service调用:onUnbind()->onDestroy()
    当绑定服务组件(调用bindService()的主体)销毁时,其绑定的Service会自动调用onUnbind()->onDestroy()


Paste_Image.png


当同时调用startServicebindService时:


Paste_Image.png


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

BroadcastReceiver

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

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


    Paste_Image.png

  • ....
      
  • ....
      
  • 动态注册
    动态注册是通过代码注册广播

  • ...String action = "action";     //定义ActionIntentFilter 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受注册者的生命周期的限制。

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