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().

VirMach:$27.3/月-E3-1240v1/16GB/1TB/10TB/洛杉矶等多机房

上次部落分享过VirMach提供的End of Life Plans系列的VPS主机,最近他们又发布了DEDICATED MIGRATION SPECIALS产品,并提供6.5-7.5折优惠码,优惠后最低每月27.3美元起。同样的这些机器现在订购,将在2021年9月30日至2022年4月30日之间迁移,目前这些等待迁移机器可以在洛杉矶、达拉斯、亚特兰大、纽约、芝加哥等5个地区机房开设,未来迁移的时...

ATCLOUD.NET-OVH海外高防云主机,采用KVM架构,稳定安全且便宜好用,仅3刀起

官方网站:点击访问ATCLOUD.NET官网优惠码:目前提供Cloud VPS与Storage VPS两款产品的六折优惠活动(续费同价,截止至2021年5月31日)优惠码:UMMBPBR20Z活动方案:一、型号CPU内存磁盘流量优惠价格购买链接VPS-1GB0.5×2.6+GHz1GB20GB1TB$3立即购买VPS-2GB1×2.6+GHz2GB50GB2TB$6立即购买VPS-4GB2×2.6...

618云上Go:腾讯云秒杀云服务器95元/年起,1C2G5M三年仅288元起

进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...

bindservice为你推荐
图片地址如何根据一张图片的地址找到它在哪发的fclosefclose / fopenmindmanager破解版xmind mac破解版哪个好用inode智能客户端win7如何使用校园网iNode智能客户端spawning为什么编译和运行vc++ 时会出现Error spawning c1.exe 的错误民生电商陆金所、民生电商哪个更适合投资?layoutsubviews如何让NSSplitView的子View的大小固定什么是SOA什么是cookies 有什么作用文件系统类型windows 操作系统的文件系统具体有哪几种screencapture求一款这样的截图软件
国外vps租用 草根过期域名 x3220 kdata unsplash 网页背景图片 申请空间 北京双线 129邮箱 美国免费空间 如何安装服务器系统 安徽双线服务器 上海电信测速网站 smtp服务器地址 iki umax 沈阳idc 腾讯云平台 塔式服务器 什么是dns 更多