Android四大组件

一、Activity

用户可操作的可视化界面,为用户提供一个完成操作指令的窗口

二、Service

运行在手机后台,适合执行不需要和用户交互且还需要长期运行的任务。

Service分为两种,一种是Service(这一种是运行在主线程中的,如果要执行耗时操作,可在service中创建一个异步来执行),一种是IntentService(这是一种异步服务,是继承于Service的子类),所以推荐当要执行耗时操作时使用IntentService,如果不耗时,我们可以使用Service。

Service的两种启动方式:

通过startService方法启动服务,通过stopService方法停止该服务。

特点:通过startService方法启动的service一旦服务开启就跟调用者没有任何关系了。调用者退出了,服务还在后台运行,调用者不能调用服务里面的方法。

通过bindService方法启动服务,通过unbindService方法停止该服务。

特点:使用bindService方法启动的服务,调用者退出,服务也停止了,调用者可以调用服务中的方法。

onCreate()

1.如果service没被创建过,调用startService()后会执行onCreate()回调;

2.如果service已处于运行中,调用startService()不会执行onCreate()方法。

也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作。

onStartCommand(Intent intent, int flags, int startId)

如果多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。onStartCommand()方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。

onBind(Intent intent)

Service中的onBind()方法是抽象方法,Service类本身就是抽象类,所以onBind()方法是必须重写的,即使我们用不到。

1.bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。

2.client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。

3.bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用Context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。

当执行到onServiceConnected回调时,可通过IBinder实例得到Service实例对象,这样可实现client与Service的连接。

三、BroadcastReceiver

运行在应用程序间传输信息,可以使用广播接收器来让应用对一个外部事件做出响应。

广播分为两种,一种是普通广播,或者称为无序广播,另一种是有序广播。

无序广播是完全异步的,同一时刻在逻辑上是能够被所有的接收者接收到的,传递的效率高,缺点是接收者不能处理结果传给下个接收者,并且无法终止广播的传播(有序广播就是和这个相反的,有顺序的传播,两个广播的定义就是完全相反的)。

Context.sendBroadcast()

发送的是普通广播,所有接收者都有机会获得并进行处理。

有序广播是根据你在清单中为每个reciver设置priority的大小(越大优先级越高)将消息依次的传递(由高到低),拦截可以使用abortBroadCast来拦截,使用sendOrderBroadCast发送广播。

广播的生命周期就是在处理完onReceive时,系统将认定他不是一个活动的对象了,就是杀掉他,由于广播的生命周期很短,所以不建议在onReceive中执行一些耗时操作。

静态注册:在清单文件中注册

动态注册:在代码中registerReceiver。

静态注册是常驻型,也就是说当应用程序关闭后,如果有广播来,程序也会被系统调用运行起来。

动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。

四、ContentProvider

内容提供器,它主要的作用是进程间进行数据交互和共享,即跨进程通信。

被访问的数据主要以数据库的形式存在,而且还可以选择共享哪一部分的数据。这样一来,对于程序当中的隐私数据可以不共享,从而更加安全。ContentProvider是android中一种跨程序共享数据的重要组件。ContentProvider通过uri来标识其它应用要访问的数据,通过ContentResolver的增、删、改、查方法实现对共享数据的操作。

它和Activity一样也需要我们再xml文件中声明。

统一资源标识符(URI):唯一标识 ContentProvider 和其中的数据,外界进程通过 URI 找到对应的ContentProvider & 其中的数据,再进行数据操作。

ContentResolver类:统一管理不同 ContentProvider间的操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值