Android-四大组件生命周期及扩展

作者: 芒果味的你呀 | 来源:发表于2017-08-11 17:27 被阅读42次

    Activity 活动

    Service 服务

    Content Provider 内容提供者

    BroadcastReceiver 广播接受器


    Activity 活动(负责用户界面的显示和交互)

    1.生命周期:

    onCreate()-onStart()-onResume()-onPause()-onStop()-onRestart()-onDestory()

    ⚠️⚠️⚠️:

    a.其中 onstart(不可见-可见) onstop(可见-不可见)

    onresume(获得焦点,可交互) onpause(失去焦点、不可交互)

    oncreate方法中有一个bundle参数用于恢复activity意外销毁时保存的数据,bundle不为空,取数据。

    意外销毁时(不是自己调用finish())在onSavedInstanceState方法中保存当前的状态。调用大多在onpause之前

    onpause中保存持久化数据、在onSavedInstanceState中保存的是瞬时数据。

    onRestoreInstanceState()在在onStart()之后调用

    b.点back键:onpause onstop ondestory返回的活动 oncreate onstart

    点home键:onpause onstop返回前台onrestart onstartonresume

    一个对话框来到前台:onpause对话框消失onresume

    c.A页面-B页面跳转 若B覆盖A: onpause(A)-oncreate-onstart-onresume-onstop(A)

    A页面-B页面跳转 若B透明,没有覆盖A:

    onpause(A)-oncreate-onstart-onresume

    d.横竖屏切换:不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

    2.Activity的退出:

    结束一个活动:Activity---finish –>onpause onstop ondestory

    结束进程:

    android.os.Process.killProcess(android.os.Process.myPid());

    System.exit(int code)

    这两个方法,会使activity非正常退出,不会去执行onpause onstop ondestory

    3.fragment生命周期

    onAttach()---fragment初次依附到activity上调用

    onCreate()---初始化fragment

    onCreateView()---初始化fragment视图

    onActivityCreated()---fagment所依附的activity创建

    onStart()---由不可见-可见

    onResume()---获取焦点

    onPause()---失去焦点

    onStop()---可见-不可见

    onDestoryView()--fragment视图被销毁

    onDestory()--fragment被销毁

    onDetach()--fragment不再依附activity


    Service 服务(在后台完成用户指令,没有图形界面)

    1.生命周期:

    startService() 方式启动Service

    onCreate() onStartCommand() 调用stopService() onDestory()

    ⚠️⚠️⚠️:一个service只会创建一次,只有第一次执行的时候会执行oncreate()

    之后再执行只会调用onstartcommand()

    bindService()方式启动Service

    onCreate() onBind() onUnbind() onDestory

    采用bind方式 和activity绑定,一但销毁activity,与之绑定的service也就相应结束。“不求同时生,必须同时死”


    Content Provider 内容提供者(给其他应用程序提供指定数据集,共享数据)

    Content Provider 内容提供者,用于对外提供数据

    Content Resolver 内容解析者,用户获取提供者提供的数据(外部应用通过resolver来访问provider)

    Content Observer 内容监听器,可以监听数据的改变状态

    使用Content Provider对外共享数据的步骤:

    定义一个类继承Content Provider,然后重写query、insert、delete、update方法等


    BroadcastReceiver 广播接受器(主要用于接受系统或app发送的广播事件--通信)

    使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应(通过启动activity或service来响应收到的信息,或者用NotificationManager来通知用户)。

    1.注册方式:

    动态注册 在activity或service中注册,它们若被销毁,广播也就接受不到了。

    静态注册 AndroidManifast.xml中,只要app在运行就一直能接收到广播。

    2.生命周期:onReceive()

    生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR 程序无响应的错误信息。

    如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成。

    不要在广播接受者中创建子线程,因为它的生命周期非常短,子线程可能还没有结束BroadcastReceiver 就先结束了,子线程相应也就结束了。

    3.广播类型:

    普通广播:

    sendBroadcast(Intent intent)发送广播

    优点:效率高

    缺点:一个接受者不能将处理结果传递给下一个接受者,并且无法终止广播的传播

    有序广播:

    sendOrderedBroadcast(intent, receiverPermission)

    缺点:效率低

    优点:按优先级别由高到低依次传播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播。也可以通过setResultExtras(bundle)方法将处理结果存入bundle中,下一个接受可以通过getResultExtra(true) 方法获取上一个接受者传来的bundle数据。


    相关文章

      网友评论

        本文标题:Android-四大组件生命周期及扩展

        本文链接:https://www.haomeiwen.com/subject/zydrrxtx.html