Android学习笔记之Service

1 篇文章 0 订阅
1 篇文章 0 订阅

今儿老师简单的讲了下Service。额有点没吃饱的感觉,又看了API,发现上面倒是讲的相当透彻深入。现在摘录几点:

1.介绍Service类时,API首先讨论了Service不是什么,它不是什么呢?首先它不是一个单独的进程,Service对象本身并未表明它自己是个进程;如果没有精确地规定,它和应用(application)运行同样的程序。再者,Service不是一个线程,它不是一个方法使得自己脱离主线程而独立运行。


2.Service本身很简单,提供了两个主要功能:

a.程序和系统通讯的能力,程序可以告诉系统说,我在后台运行想要什么东西,你给我准备好(即使用户并未和程序产生直接的交互)。这相应的需要调用Context.startService()方法,这个方法允许有一个长期存在的连接使得程序和系统交互。

b.向其他程序提供本身功能模块的能力。这相应的要调用Context.bindService()方法,这个方法允许有一个长期存在的连接使得程序间进行交互。


3.Service生命周期

有两个原因使得一个Service由系统运行。若有程序调用了Context.startService(),系统会回复service(若有需要可立即create并调用service的onCreate()方法),然后调用由client提供参数的onStartCommand(Intent,int,int)方法。从这个点上开始,service会一直运行,直到Context.stopService()或stopSelf()被调用。注意,多次调用Context.startService()不会聚集(虽然它们确实引起了多次回应。)。所以对某个Service来说,不论你调用多少次startService(),只要stopService()或stopSelf()一被调用,该服务就会终止。


对于已启动的服务,有两个额外的主要操作方式使得它们能够决定是否run in.而是否能够run in取决于onStartCommand()方法的返回值:若为START_STICKY ,则是针对那些已经有明确启动和终止的需要的服务;START_REDELIVER_INTENT则是针对那些在程序处理任何commands时保持运行就得的服务。


Client也可以用Context.bindService()来获得和一个持续的连接的服务。若还没有运行service,调用Context.bindService()的Client会调用onCreate(),但是不调用onStartCommand();Client会接受到由service的onBind(Intent)方法返回的IBinder对象,这允许Client之后回调service。一旦这种联系(connection)建立起来,Service会一直运行,不论client是否保留着对service的IBinder的引用。


一个Service可以被启动的同时被绑定。在这种情况下,只要它在已启动状态或是存在一个或多个由Context.BIND_AUTO_CREATE创建的连接,service都会一直保持运行状态。通常返回的IBinder是个有安卓接口语言的复杂接口。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值