想成事业,必须宝贵的时间。充分利用时间!
说一下Service服务概述
是能够在后台执行长时间运行操作并且不提供用户界面的应用程序组件,其他应用程序组件能启动并且当用户切换到另一个应用程序时,服务还是在后台运行,此外,组件能够绑定到服务并与之换,甚至执行进程间通信(IPC),例如 服务能在后台处理网络事物,播放音乐,执行文件,执行文件I/O与ContentPrivider通信!
Service分类
Stared(启动):当应用程序组件(例如ACTIVITY)通过调用statrService()方法启动服务时,服务处于“stared”状态,一旦启动服务能在后台无限期运行,即使启动它的组件已经被销毁,通常,启动服务执行单个操作并且不会向调用返回结果,例如他可能通过网络下载或者上传文件,如果操作完成,服务需要停止自身!
Bound(绑定) :当应用程序组件通过调用bindService方法绑定到服务器时,服务处于“biund”状态时。绑定服务器提供客户端-服务器接口可以组件与服务交互,发送请求,获得结果甚至使用进程间通信 跨进程完成这项操作,仅当其他应用程序组件与之绑定时,绑定服务才运行,多个组件可以一次绑定到服务上,但是当他们都解绑定时服务被销毁
两种类型服务分开讨论,服务同时分为两种类型。它可以启动(无限运行)也能绑定,其中重点在于是否实现一些回调方法,onStartCommand()方法可以组件启动服务,onBind()方法可以组件绑定服务!
不管应用程序是否为启动状态,绑定状态或者两种都能通过Intent使用服务(甚至从独立的应用程序)就像使用Activity那样,然而,开发人员可以在配置文件中将服务声明为私有的,从而阻止其他应用程序访问。
服务运行于管理它进程的主线程,不会创建自己的线程也不会运行独立的进程(除非开发定义)这意味着,如果服务将完成CPU密集工作或者阻塞操作(MP3回访或者联网)
开发人员需要在服务中创建信线程来完成这些工作,通过使用独立的线程,开发人能让减少应用程序不响应(ANR)错误的风险并且应用程序主线程仍然能用于用户与activity交互。
Service类中的重要的方法
为了创建服务,开发人员需要创建Service类(或其子类)的子类,在实现类中,需要重写一些处理服务生命周期重要方法的回调方法,并根据需要,提供组件绑定到服务的机智,需要重写重要回调方法如下;
* onStartCommand()
当其他组件,例如ACTIVITY调用StatrService()方法请求服务启动时,系统调用该方法,一旦该方法执行,服务就启动("started"状态)并在后台无限期运行。如果开发人员现该方法,则需要在任务完成时调用ONSelf()或StopService()停止服务,如果仅想提供绑定,则不必实现该方法。
*onbind()
当其他组件调用bingService()方法想与服务绑定时(例如执行RPC)系统共调用该方法,在该方法实现中,开发人员必须通过返回Ibinder 向客户端提供用来与服务进行通信的接口,,方法必须实现,但是如果不想绑定,则返回null;
*oncreate
当服务第一次创建时,系统调用该方法执行一次性建立过程,(系统调用OnstartCommand()或onbind()方法前),如果服务已经运行,该方法不会调用
* onDestroy
当服务不再使用并将其销毁时,系统调用该方法,服务应该实现该方法来清理诸如 线程,注册监听器,接收等资源,这是服务收到的最后的调用。
如果 组件调用startService()方法启动服务(onstartCommand()方法被调用)服务需要用onself()方法停止自身,或者其他组件使用的stopService()方法停止服务。
如果组件调用bindservice()方法启动服务(onstartCommand()方法不被调用),服务运行时间与组件绑定到服务的时间一样长,一旦服务器从所有客户端解绑定,系统会将其销毁。
android 系统仅当内存不足时,并且必须回收系统资源来显示用户关注的activity,才会强制停止服务,如果服务绑定到用户关注的activity 则会降低停止概率,如果服务被声明为前台运行,则不会停止,否则,如果服务是Strarted状态并且长时间运行,则系统会随时间推移降低其在后台任务列表中的位置并且服务有很大概率被停止,如果服务是strared状态,则必须设计如何优雅的系统重启服务呢,如果系统停止服务,则资源可用时就会重启它(尽管这也依赖与onstartCommand()方法的返回值)
加群安卓Android开发的Club 454890181 有意见可以说出来哦