本文共 1893 字,大约阅读时间需要 6 分钟。
Inter Process Communication,IPC(进程间通信,吼吼。),它可以用于解决两个不同Android应用程序进程之间的调用和通信问题。
Service生命周期 :
调用startService()启动Service --> onCreate() --> onStart() --> Service正在运行-->Sercice被停止-->onDestroy()--> 关闭Service
使用方式有两种 :
1.启动方式(不能获取Service对象,无法调用Service中的方法)
1.1:Context.startService()启动Servide
1.2:Context.stopService()终止Service或Service.stopSefl()停止Service
1.3:1.2中的终止并未真正终止,除非它所在的Activity调用onDestroy()才算真正终止
2.绑定方式(能获取Service对象,可以调用Service中的方法,通过Connection实现)
2.1:Context.bindService()建立服务链接
2.2:Context.unbindService()终止链接
最主要的是:同一个Service可以绑定多个服务链接,这样可以同时为多个不同的组件提供服务
例:播放MP3暂停
Context.startService();启动服务
Context.bindService();获取Service对象保存播放信息,再用:暂停函数暂停播放
需要注意的是:在此情况下如何调用Context.stopService()终止播放的话并不能停止Service,需要在所有的服务链接关闭后,Service才能真正停止
Intent广播消息时候要有一个唯一标识,此处,Service在全局文件中注册时也要一个唯一标识
<service android:name=".继承Service的类名">
代码实现Service后有两种方式启动服务:显式启动和隐式启动
1.显式启动:
final Intent serviceIntent = new Intent(this,继承Service的类名.class);
startService(serviceIntent);
2.隐式启动:
final Intent serviceIntent = new Intent();
serviceIntent.setAction("继承Service的类_完整路径");
<service android:name=".继承Service的类名">
<intent-filter>
<action android:name="继承Service的类_完整路径"/>
</intent-filter>
</service>
无论何种方式 :关闭方式都一样的:stopService(serviceIntent);……………….吼吼
bindService:
创建一个能提供绑定服务的功能时,必须提供一个IBinder对象,吼吼,客户端能用这个对象与服务交互,定义方式有三种:
1.扩展Binder类
1.1:在Service类中,创建一个Binder实例,包含客户端使用的公共方法,返回当前服务对象
1.2:在onBinder()方法中返回Binder实例
1.3:在客户端,从onServiceConnected()方法中取得Binder实例
2.使用Message
3.使用AIDL(Android Interface Definitation Language)
服务启动之后是运行在主线程之中的,输入日志中可以直接取线程信息:(Log.i(“TAG”,Thread.getCurrentThread.getId());)
在Service里面处理比较耗时的事件用多线程即可解决的,但在Android中系统提供了一个IntentService来专门处理异步请求,客户通过调用startService(Intent )方法传递请求给IntentService,IntentService再通过 worker Thread来处理每个Intent对象,执行完以后会自动停止此Service…..吼吼。。有队列使用哦
步骤如下:
1.写构造方法
2.复写onHandleIntent()方法。
本文转自华华世界 51CTO博客,原文链接:
http://blog.51cto.com/mzh3344258/733364,如需转载请自行联系原作者