android文本类组件总结,Android四大组件总结

Activity

1.生命周期

17da000c66ef

截屏2020-08-13 上午8.03.46.png

oncreate:就是activity的创建方法,其中调用setContentView去加载界面布局

onrestart:就是调用了stop方法后再返回此app,按home键回到主菜单再回来就是这种场景

onstart:表示启动activity,但是还并不是可见的

onResume:acitivity已经可见,并且可以跟用户交互

onPause:表示activity暂停了,仍然可见,场景就是弹出一个dialog,activity还是可见的

onstop:表示activity即将停止,场景就是从一个A页面跳转到B页面,A又可见变为不可见,不可见时就调用了onStop方法

onDestory:表示activity进行销毁工作,做一些资源的回收

保存当前activity的状态:

当activity需要保存当前状态时,例如:保存输入框(Editext)里面的信息时可以调用onSaveInstance的方法,这个方法我们可以传入一个Bundle进去,onSaveInstanceState的执行顺序是在onStop之前,onRestoreInstanceState是在onStart之后

17da000c66ef

通过onRestoreInstanceState来恢复数据,调用这个方法不用做非空判断,只有Bundle非空才调用这个方法

17da000c66ef

需要做非空判断

2.启动模式

standard:这个是默认的启动模式,谁启动了这个activity那这个activity就会运行在启动它的那个所在的栈中,这个模式,每启动一次就新建一个activity,在Service或Application中启动一个Activity,由于Service他们没有任务栈,这时可以通过Flag来解决,通过setFlags指定FLAG_ACTIVITY_NEW_TASK标记位,创建一个新栈

singleTop:这个模式就是当这个activity位于栈顶时就不会去创建一个新的activity,他会重用栈顶的activity,会调用onNewIntent方法,外部程序调用这个Activity的话会把它放到新的Task中

singleTask:这个模式是一种单例模式,即一个栈内只有一个该activity的实例,如果栈内存在这个activity就会使这个activity上的activity都出栈,使这个activity位于栈顶,如果不存在这新建activity放入栈中,应用场景有主菜单,当我们想回到主菜单时,不用将已经启动的activity一个一个的finish

singInstance:这个模式是singleTask的加强版,当打开这个activity时就会新建一个栈并将activity放入其中,该栈只能放入这个activity

Service

Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,

只不过它没有UI界面,是在后台运行的组件。

Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需 要和用户交互而且还要求长期运行的任务。Service默认并不会运行在子线程中,它 也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执 行耗时的操作,除非你在Service中创建了子线程来完成耗时操作。

1.使用方式分类

startService:启动一个后台服务,不进行通信,停止服务使用stopService

bindService:启动的服务可以进行通信,停止服务使用unbindService

同时使用startService和bindService启动服务:停止服务应同时使用stopService和unbindService

2.生命周期

17da000c66ef

截屏2020-08-13 上午9.35.32.png

1.onCreate:系统在service第一次创建时执行这个方法,如果service已经运行了,就不会再调用这个方法了

2.onStartCommand:每次客户端调用startService方法启动Service就会回调此方法,如果service启动后就需要调用stopSelf()或stopService来停止服务

3.onBind:当调用bindService想要绑定service时调用此方法,一旦绑定后下次再调用bindService就不会调用此方法了

4.onUnbind:调用unbindService时会调用此方法,一旦解除后再调用就会抛出异常

5.onDestory:系统在service不再被使用并要销毁时调用此方法,释放资源

三种启动情况下的生命周期:

1.startService/stopService

onCreate -> onStartCommand -> onDestroy

startService多少次,会执行onStartCommand方法多少次,但onCreate都只会调用一次,不管startService多少次,stopService一次即可停止服务

2.bindService/unbindService

onCreate->onBind-> onUnBind -> onDestroy

bindService多少次,onCreate和onBind都只执行一次,onStartCommand始终不会调用,通过bindService启动的Service生命周期依附于他的Context

3.混合型

onCreat->onStartCommand->onBind->onUnBind->onDestroy

不管调用几次,onCreate方法始终只调用一次,onStartCommand的调用次数与startService的调用次数相同,(使用bindService方法不会调用onStartCommand),调用unBindService也不会停止Service,必须调用stopService或stopSelf来停止服务

BroadcastReceiver

角色:

1.广播发送者 2.广播接受者

作用:在不用的组件之间进行通信,可以在多线程中进行通信

实现原理:使用了设计模式中的观察者模式:

1.广播接受者通过Binder机制在AMS(Activity Manager Service)注册

2.广播发送者通过Binder机制向AMS发送广播

3.AMS根据广播发送者要求,在注册列表中,寻找合适的广播接受者,根据IntenFilter/Permission

4.AMS将广播发送到合适的广播接受者相应的消息循环队列中

5.广播接受者通过消息队列拿到广播,并回调onReceive()方法

注册方式:

1.静态注册:直接在manifest里面注册,在Android8.0使,google为了节省系统资源开销禁用掉许多静态广播,推荐采用动态注册

2.动态注册:就是在代码中注册,推荐在onResume中通过registerReceiver方法注册,在onPause中unregisterReceiver释放,避免内存泄漏,注册通过自定义BroadCast的继承类并重写其onReceive方法来注册

广播的类型:

1.普通广播:

Intent intent = new Intent(); //对应BroadcastReceiver中intentFilter的action intent.setAction(BROADCAST_ACTION); //发送广播

sendBroadcast(intent);

2.系统广播:这部分广播是系统状态发生改变是系统发送广播,我们只需要定义广播接受者是定义相关的action即可

3.有序广播: Ordered BroadCast

发出去的广播是有顺序的,按priority(优先级)先后接受到广播,priority一样时动态广播优先于静态广播,接收到广播的广播接受者可以打断广播,调用abortBroadCast可以打断广播,之后广播就不继续向下传递了

发送代码:sendOrderedBroadcast(intent)

4.LocalBroadcastManager:

解决广播安全性问题,即此广播只接受本应用中的广播,发送的广播也只能本应用接收到

localBroadcastManager.sendBroadcast(intent);

ContentProvider

定义:类容提供者

作用:用于进程将进行数据交互、共享即进程通信

原理:采用Binder机制

1.URI统一资源标识符:

17da000c66ef

截屏2020-08-13 下午9.07.31.png

2.MIME数据类型:全称Multipurpose Internet Mail Extensions,多功能Internet 邮 件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮 件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一 种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动 使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些 媒体文件打开方式。

作用:就是指定用什么软件打开此格式的文件,例如.pdf文件采用flash打开

他的类型有:text/html、text/css等

3.ContentProvider类,主要用于不同应用间操作数据库,跨进程操作数据库,当我们实现他的继承类时需要实现他的增、删、改、查方法

4.ContentResolver类:

通过这个类来和contentProvider进行交互,当有多个contentProvider时可以用contentResolver来进行统一管理,我们实现他的继承类时需要实现他的增、删、改、查方法

5.ContentUris类:可以用来截取ID和添加id等操作

17da000c66ef

截屏2020-08-13 下午9.19.08.png

6.UriMatcher类:用来匹配URI

17da000c66ef

截屏2020-08-13 下午9.21.25.png

7.ContentObserver类

通过观察Uri引起contentProvider中的数据变化之后通知外界,即当数据发生改变时通知外界

17da000c66ef

截屏2020-08-13 下午9.24.11.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值