2016-05-10Android四大组件之Service

1.Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的操作。

2.Android中进程的种类
    Foreground process 前台进程
    Visible process 可视进程, 可以看见, 但不可以交互.
    Service process 服务进程
    Background process 后台进程
    Empty process 空进程(当程序退出时, 进程没有被销毁,而是变成了空进程)

3.当回收服务,系统非必要情况下不会轻易回收, 如果需要回收掉这三种进程,那么在系统内存够用时,
  会再给重新启动进程;但是服务进程如果用户手动的关闭服务,这时服务不会再重启了。

4.为什么用服务而不是线程
    Android应用程序刚启动都会开启一个进程给这个程序来使用。 Android一个应
    用程序把所有的界面关闭时, 进程这时还没有被销毁,处于空进程状态,Thread运行在空进程中,很容易的被销毁了。
    服务不容易被销毁, 如果非法状态下被销毁了, 系统会在内存够用时,重新启动。

5.如何使用Service
    创建Service,定义类继承Service, AndroidManifest.xml中定义<service>
    开启Service,在其他组件中调用startService方法
    startService(intent);(在activity中可以直接调用),会执行onstartCommand(生命周期方法),如果发现service还没有,就会先创建执行oncreate。
    onCreate只会执行一次,服务一旦被创建出来,就不会再执行onCreate方法,以后再去开启服务只会执行onStartCommand。
    停止Service,调用stopService方法,会执行onDestory()(生命周期方法)
    服务也是运行在主线程中,耗时操作需要放到子线程中,不然会出现anr
    setForegound(true)(直接在service里调用),为了避免服务被杀死,我们可以指定这个服务为前台进程。
    服务在执行生命周期方法时,也是一个前台进程。广播接收者也一样,在执行生命周期方法onReceive时,也是一个前台进程。

6.
    /**
    * 绑定服务时调用
    */
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

    telephonyManager.listen(new MyPhoneListener(),PhoneStateListener.LISTEN_CALL_STATE);

    状态: TelephoneManager.CAll_state_idle:电话处于空闲状态, call_state_ringing,电话处于铃响状态。call_state_offbook:解除锁定,电话处于接听状态。
    在MainActivity类中启动Service:
        Intent service = new Intent();
        service.setClass(this, MyService.class);
        startService(service);
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

7.Service的生命周期
    可以有两条不同的路径。服务有两种开启方式,一个是直接onstart,另一个是绑定服务。
    started service(标准开启模式)
        其他组件调用startService()被创建。这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它
    bound service(绑定模式)
        其他组件(一个客户)调用bindService()来创建的,客户可以通过一个IBinder接口和service进行通信。客户可以通过
unbindService()方法来关闭这种连接。一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service
    绑定服务方法: bindService(intent,serviceConnection,intflag);在其他组件中调用此方法,调用后服务内部的生命周期方法onBind方法执行,一旦绑定成功, onBind只执行一次,再次绑定, onBind不会执行。
    第二个参数: serviceConnection:连接对象,连接上服务之后可以调用服务的方法传入一个自定义的ServiceConnection用来接收Ibinder。实例化ServiceConnection对象,重写内部方法: onServiceConnected(ComponentName name,Ibinderbinder):绑定成功获取连接时,执行的方法。
    参数: IBinder对象:接收服务内部onBind方法,返回的对象(通过这个对象可以间接的访问到服务内部的方法)
    第三个参数: Bind_auto_create,如果绑定的这个服务没有创建,那么自动创建这个服务,调用生命周期方法onCreate()方法。
    unBindService()解除绑定服务,内部调用服务的生命周期方法onUnbind(),然后调用onDestory()销毁服务。服务只能被解除绑定一次,如果unBindService方法被调用多次,就会出错   

8.启动与绑定的区别
    通过start()直接启动服务:服务一旦开启,就与调用者没有任何关系,调用者的activity即使退出,也不会影响后台服务的运行。
    通过bindService()绑定服务:通过绑定方式开启的服务,服务跟调用者不求同生但求同死。注意:如果一个程序的activity绑定了服务,那么这个activity退出时,会报异常,说是服务没有被释放。那么我们可以重写activity的onDestory方法,方法内调用unbindService(),去显示的解除与服务的绑定。
    第二个不同点:
    Start直接启动服务的方法,调用者不能调用服务内部的方法。绑定服务启动服务的方法,调用者可以调用服务内部的方法利用serviceConnection接口获取服务onbind返回的ibinder对象,这个对象同时实现了自定义的接口,这个接口内定义了服务中的方法。
时间: 2024-11-02 08:53:09

2016-05-10Android四大组件之Service的相关文章

Android开发四大组件之Service(实例篇)

关于Service的开发详解已经在上一篇:Android开发四大组件之Service(详解篇)讲的很清楚了,本篇主要对Service的开发实例做下讲解. 程序运行效果图: 程序代码: BindService: package com.jph.servicedemo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; /**

Android 四大组件之Service详解

                   Android四大组件之Service详解    来这实习已经10多天了,今天整理整理学习时的Android笔记.正所谓好记性不如烂笔头,今天来说说service组件. service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的. Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个

【Android的从零单排开发日记】之入门篇(五)——Android四大组件之Service

这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的级别差不多,但不能自己运行只能后台运行.service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等, 总之服务总是藏在后台的. ps:Service运行在主线程中的,所

Android四大组件之Service的介绍

Service的基本认识 Service是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.Service可由其他应用组件启动,而且即使用户切换到其他应用,Service仍将在后台继续运行.Service主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. Service和Activity很相似,但是区别在于:Service一直在后台运行,没有用户界面,所以不会到前台,如果Service被

Android 四大组件之Service

---恢复内容开始--- 1,Service的生命周期 onCreate第一次创建service的时候调用. onStartCommand启动service的时候调用. onStart(This method was deprecated in API level 5. Implement onStartCommand(Intent, int, int) instead.) onDestroy销毁的时候调用. 2,进程优先级(由高到低):(红色字体的两个进程是经常被系统回收的两个进程)    1

四大组件之Service小结

总结提高,与君共勉! 1.Service是什么 Service 是看不到界面的,,就是一个没有界面的Activity, 并且长期在后台运行的一个组件.. 由于ANR对Activity和BroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒),使得在其中都不适合执行较耗时操作,这样像网络.数据库.复杂计算这类耗时操作的执行就需要一个组件来承担.Service作为Android四大组件之一,其功能之一就是耗时操作的执

Android 四大组件之Service(上)

1.Service简介 Service是Android四大组件中最与Activity相似的组件,他们都代表可执行的程序.Service一直运行于后台,不会与用户交互,可用来处理一些耗时的任务(比如:后台播放音乐,I/O操作等).它的创建.配置与Activity基本相似,下面将详细介绍Android Service的开发. 2.创建.配置Service 2.1 定义一个继承Service类的子类 2.2 在AndroidManifest.xml中配置该Service 需要注意的是 Service和

Android 四大组件之service与Broadcast

Android 四大组件之一:service: Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy 主要有绑定和非绑定两种方式 首相在Activity中设置四个Button,用于测试绑定和非绑定两种方式,按下Button播放音乐,停止音乐,非绑定用StopService停止,绑定方式用Bind Service启动,解绑用unbindService停止. 非绑定:Intent intent=new Intent(Mai

Android四大组件之~~Service

声明:转载请注明出处:http://blog.csdn.net/hello_chillax 开题:对android稍微有些了解的朋友都知道,android中有四大组件,分别是:Activity,Service,ContentProvider,BroadcastReceiver.今天来介绍其一:Service. 一.Service和Thread有什么区别和联系,以及使用Service的必要性. 服务: 长期后台运行的没有界面的组件 android应用:什么地方需要用到服务? 天气预报:后台的连接服

android四大组件之service生命周期

和activity一样,service服务同为android的四大组件之一.而和activity不同的是,service并不会显示出来,也就是没有用户界面,它是后台运行的,但需要activity或其它context来触发. 简单的一个例子是android手机里的音乐播放器,打开应用看得到的界面是activity,点击播放音乐启动的音乐服务则是service(听得到但看不到.例如舞台上的幕后服务者,为大家操作着音响和灯光,却从不亮相).而且就算退出了音乐播放器,却依然能够在桌面或其它应用里面听得到