Android开发Android技术知识Android开发经验谈

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

2017-08-11  本文已影响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数据。


上一篇下一篇

猜你喜欢

热点阅读