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 黑色星期五云服务器七折优惠 站群服务器首月半价

一年一度的黑色星期五和网络星期一活动陆续到来,看到各大服务商都有发布促销活动。同时RAKsmart商家我们也是比较熟悉的,这次是继双十一活动之后的促销活动。在活动产品中基本上沿袭双11的活动策略,比如有提供云服务器七折优惠,站群服务器首月半价、还有新人赠送红包等活动。如果我们有需要RAKsmart商家VPS、云服务器、独立服务器等产品的可以看看他们家的活动。这次活动截止到11月30日。第一、限时限...

香港云服务器 1核 1G 29元/月 快云科技

快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...

GreenCloudVPS($30/年),500G大硬盘VPS,10Gbps带宽

GreenCloudVPS最近在新加坡DC2节点上了新机器,Dual Xeon Silver 4216 CPU,DDR4内存,10Gbps网络端口,推出了几款大硬盘VPS套餐,基于KVM架构,500GB磁盘起年付30美元。除了大硬盘套餐外,还加推了几款采用NVMe硬盘的常规套餐,最低年付20美元。不过需要提醒的是,机房非直连中国,尤其是电信用户ping值感人,包括新加坡DC1也是如此。大硬盘VPS...

bindservice为你推荐
微信收款语音播报怎么设置怎么设置农商银行的收钱语音播报?g2gB2E和G2E分别是什么意思bloomfilterJAVA怎么弄爬虫拓扑关系拓扑关系在GIS中的作用欢迎页面欢迎屏幕!!!!色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???imqq官网中国v家官网网址弹幕网站视频弹幕网站推荐问卷星登陆你好,如果之前用微信登录了问卷星小程序,以后每次回答都不需要微信登录了吗?回答了会被知道个人信息吗jsindexofjavascript 中indexof 的用法
亚洲大于500m westhost 服务器cpu性能排行 警告本网站 河南服务器 免费网站申请 域名转向 789电视 域名接入 美国堪萨斯 新世界服务器 空间首页登陆 免费稳定空间 winserver2008 发证机构 带宽测速 hosts文件 neicun 大硬盘补丁 次世代主机 更多