bindservice如何启动和停止用service

bindservice  时间:2021-07-01  阅读:()

怎么让启动的Service一直存在,或者说运行

按使用方式分类:   类别 区别   startService 启动的服务 主要用于启动一个服务执行后台任务,不进行通信。

停止服务使用Service   bindService 启动的服务 该方法启动的服务要进行通信。

停止服务使用unbindService   startService 同时也 bindService 启动的服务 停止服务应同时使用stepService与unbindService   以上面三种方式启动的服务其生命周期也有区别,将在随后给出。

  2、Service 与 Thread 的区别   很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。

  1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。

可以用 Thread 来执行一些异步的操作。

  2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。

如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。

如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。

因此请不要把 Service 理解成线程,它跟线程半毛钱的关系都没有!   既然这样,那么我们为什么要用 Service 呢?其实这跟 android 的系统机制有关,我们先拿 Thread 来说。

Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。

因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。

另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。

  举个例子:如果你的 Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该 Thread 需要在 Activity 没有start的时候也在运行。

这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制之前创建的 Thread。

因此你便需要创建并启动一个 Service ,在 Service 里面创建、运行并控制该 Thread,这样便解决了该问题(因为任何 Activity 都可以控制同一 Service,而系统也只会创建一个对应 Service 的实例)。

  因此你可以把 Service 想象成一种消息服务,而你可以在任何有 Context 的地方调用 Context.startService、Service、 Context.bindService,Context.unbindService,来控制它,你也可以在 Service 里注册 BroadcastReceiver,在其他地方通过发送 broadcast 来控制它,当然这些都是 Thread 做不到的。

  3、Service的生命周期   onCreate  onStart  onDestroy  onBind   1). 被启动的服务的生命周期:如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都 在后台运行。

如果一个Service被startService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建 Service的一个实例(因此你应该知道只需要一次Service调用)。

该Service将会一直在后台运行,而不管对应程序的 Activity是否在运行,直到被调用Service,或自身的Self方法。

当然如果系统资源不足,android系统也可能结束服 务。

  2). 被绑定的服务的生命周期:如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。

当连接建立之后,Service将会一直运行,除非调用 Context.unbindService 断开连接或者之前调用bindService 的 Context 不存在了(如Activity被finish的时候),系统将会自动停止Service,对应onDestroy将被调用。

  3). 被启动又被绑定的服务的生命周期:如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。

并且不管如何调用,onCreate 始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。

调用unbindService将不会停止 Service,而必须调用 Service 或 Service的 Self 来停止服务。

  4). 当服务被停止时清除服务:当一个Service被终止(1、调用Service;2、调用Self;3、不再有绑定的连接(没有被启 动))时,onDestroy方法将会被调用,在这里你应当做一些清除工作,如停止在Service中创建并运行的线程。

  特别注意:   1、你应当知道在调用 bindService 绑定到Service的时候,你就应当保证在某处调用 unbindService 解除绑定(尽管 Activity 被 finish 的时候绑定会自      动解除,并且Service会自动停止);   2、你应当注意 使用 startService 启动服务之后,一定要使用 Service停止服务,不管你是否使用bindService;   3、同时使用 startService 与 bindService 要注意到,Service 的终止,需要unbindService与Service同时调用,才能终止 Service,不管 startService 与 bindService 的调用顺序,如果先调用 unbindService 此时服务不会自动终止,再调用 Service 之后服务才会停止,如果先调用 Service 此时服务也不会终止,而再调用 unbindService 或者 之前调用 bindService 的 Context 不存在了(如Activity 被 finish 的时候)之后服务才会自动停止;   4、当在旋转手机屏幕的时候,当手机屏幕在“横”“竖”变换时,此时如果你的 Activity 如果会自动旋转的话,旋转其实是 Activity 的重新创建,因此旋转之前的使用 bindService 建立的连接便会断开(Context 不存在了),对应服务的生命周期与上述相同。

  5、在 sdk 2.0 及其以后的版本中,对应的 onStart 已经被否决变为了 onStartCommand,不过之前的 onStart 任然有效。

这意味着,如果你开发的应用程序用的 sdk 为 2.0 及其以后的版本,那么你应当使用 onStartCommand 而不是 onStart。

  4、startService 启动服务   想要用 startService 启动服务,不管Local 还是 Remote 我们需要做的工作都是一样简单。

当然要记得在 Androidmanifest.xml 中注册 service。

  根据上面的生命周期,我们便会给出 Service 中的代码框架:   .newcj.test;   import android.app.Service;   import android.content.Intent;   import android.os.IBinder;   public class LocalService1 extends Service {   /**   * onBind 是 Service 的虚方法,因此我们不得不实现它。

  * 返回 null,表示客服端不能建立到此服务的连接。

  */   @Override   public IBinder onBind(Intent intent) {   return null;   }   @Override   public void onCreate() {   super.onCreate();   }   @Override   public void onStart(Intent intent, int startId) {   super.onStart(intent, startId);   }   @Override   public void onDestroy() {   super.onDestroy();   }   }   对应生命周期系统回调函数上面已经说明,在对应地方加上适当的代码即可。

下面是启动与停止 Service 的代码:   // 启动一个 Activity   startActivity(new Intent(this, LocalService1.class));   ...   // 停止一个 Activity   Service(new Intent(this, LocalService1.class));   对应的 Intent 为标志服务类的 Intent。

  5、Local 与 Remote 服务绑定   同样记得在 Androidmanifest.xml 中注册 service   1). Local 服务绑定:Local 服务的绑定较简单,首先在 Service 中我们需要实现 Service 的抽象方法 onBind,并返回一个实现 IBinder 接口的对象。

android service有什么用

Service,看名字就知道跟正常理解的“服务”差不多,后台运行,可交互这样的一个东西。

它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用, Context.startService() 和Context.bindService()。

两种启动Service的方式有所不同。

这里要说明一下的是如果你在Service的onCreate或者onStart做一些很耗时间的事情,最好在Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情。

什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

说明service和activity的区别

activity前端显示的,就像windows中的视窗,service是在后面偷偷干事情的,可能并不知道是他在干,其实是他干的。

android的service没有像mobile被一个进程services.exe给加载,他可以在activity、broadcast中启动、用start方法启动的可以一直服务着,直到调用方法,绑定启动的是随绑定对象而存在的。

1、Activity是Android应用的核心概念,简而言之Activity为用户交互管理者,有一个可视界面呈现,而Service跟Activity的区别是他在后台运行,没有界面呈现。

2、service和activity在使用intent上的细小区别,就是intent的传值上有区别 Activity和Service的生命周期不一样,Activity处在哪个生命周期是由系统控制的,service是由程序控制的,service不能自己启动,而且service不与用户交互。

3、Service的生命周期 Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy 我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

如何获取后台运行的Service实例

startActivity启动的Service是不能获取的 . 只能通过startService去执行该Service了. 只有通过BindService即绑定一个Service的方法才能获得该Service实例 . 你可以仔细上网找找. 如下: Java codeprivate Binder myBinder = new Binder (){ public getService(){ return MyService.this ; } } public onBind(){ return myBinder ; }

菜鸟问题: bindService 如果被不断的重复调用,会有问题吗

采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。

这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。

如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。

如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

如何启动和停止用service

启: //首先注册服务 //启服务 Intentservice=newIntent(&.abc"); startService(service); //Service命周期 ①onCreate()创建Service ②onStart(Intentintent,intstartId)启Service ③onDestroy()销毁Service //关闭服务 Service(service); Service命周期比Activity少些onCreate,onStart,onDestroy 我两种式启Service,Service命周期影响 1通startService,面种 Service经历onCreate-->onStart Service候直接onDestroy 调用者直接退没调用ServiceService直台运行 调用者再起仍Service 2通bindService Service运行onCreate候调用者Service绑定起 调用者退Srevice调用onUnbind-->onDestroyed 所谓绑定起共存亡 注意:ServiceonCreate调用 论少startServicebindServiceService创建 先bindstart候直接运行ServiceonStart 先startbind候直接运行onBind先掉 能先UnbindService,再Service,所先start先bind行区别 Android服务windows服务类似东西服务般没用户操作界面运行于系统容易用户发觉使用发监控类程序 服务能自运行需要通调用Context.startService()或Context.bindService()启服务 两都启Service使用场合所同使用startService()启用服务调用者与服务间没关连 即使调用者退服务仍运行使用bindService()启用服务调用者与服务绑定起调用者旦退服务终止求同必须同死特点 打算采用Context.startService()启服务服务未创建系统先调用服务onCreate() 接着调用onStart()调用startService()前服务已经创建调用startService()并导致创建服务 导致调用onStart()采用startService()启服务能调用Service()结束服务服务结束调用onDestroy() 打算采用Context.bindService()启服务服务未创建系统先调用服务onCreate() 接着调用onBind()候调用者服务绑定起调用者退系统先调用服务onUnbind() 接着调用onDestroy()调用bindService()前服务已经绑定 调用bindService()并导致创建服务及绑定(说onCreate()onBind()并调用) 调用者希望与绑定服务解除绑定调用unbindService()调用该导致系统调用服务onUnbind()-->onDestroy().

日本美国站群服务器raksmart站群新增,限量低至月1.99美元

RAKsmart 商家八月份的促销活动今天更新。基本上和上个月的产品套餐活动差不多的,不过也是有简单的微调。对于RAKsmart商家还是比较了解的,他们家产品虽然这两年增加多个机房,以及在VPS主机方案上有丰富的机房和调整到一些自营机房,他们家的策划能力还是有限,基本上每个月的套餐活动都差不多。RAKsmart 在八月份看到有新增香港高防服务器可选,最高100GB防御。同时原来上个月缺货的日本独立...

Linode 18周年庆典活动 不断改进产品结构和体验

今天早上相比很多网友和一样收到来自Linode的庆祝18周年的邮件信息。和往年一样,他们会回顾在过去一年中的成绩,以及在未来准备改进的地方。虽然目前Linode商家没有提供以前JP1优化线路的机房,但是人家一直跟随自己的脚步在走,确实在云服务器市场上有自己的立足之地。我们看看过去一年中Linode的成就:第一、承诺投入 100,000 美元来帮助具有社会意识的非营利组织,促进有价值的革新。第二、发...

美国服务器20G防御 50G防御 688元CN2回国

全球领先的IDC服务商华纳云“美国服务器”正式发售啦~~~~此次上线的美国服务器包含美国云服务器、美国服务器、美国高防服务器以及美国高防云服务器。针对此次美国服务器新品上线,华纳云也推出了史无前例的超低活动力度。美国云服务器低至3折,1核1G5M低至24元/月,20G DDos防御的美国服务器低至688元/月,年付再送2个月,两年送4个月,三年送6个月,且永久续费同价,更多款高性价比配置供您选择。...

bindservice为你推荐
显卡挖矿啥意思请问显卡爱好者口中常挂的“挖矿”是什么意思?鲁大师中的显卡挖矿指数又是什么意思?求科普!0x80070005win7怎样解决0x80070005错误?空白代码空白名字代码溢出隐藏关于CSS样式的问题,怎么可以让div的内容自动换行,溢出隐藏,还要加省略号?云图片华为手机的云照片怎么不见了怎么办李昊天李昊天这名字给多少分jqlDX5JQL8WDPMW求大神帮查下是不是行货苹果inode智能客户端我的电脑上inode智能客户端连接网络时,提示~服务器没有响应,请确认当前认证网卡已连接到合适的网丁奇赛尔号丁奇技能表,带等级,刷什么学习力好?什么是SOA什么是java架构
域名大全 外国空间 阿里云代金券 lamp配置 私有云存储 me空间社区 nerds 南通服务器 如何用qq邮箱发邮件 网页提速 lick 监控服务器 免费个人网页 创速 免费主页空间 fatcow websitepanel apachetomcat ipower 2016黑色星期五 更多