项目经常要跟别的项目进行交互,比如说蓝牙打印机等,或者处理一些网络状态,或者调用baidu、高德等地图的时候就会用到,
或打开了音乐播放之后,便想去看看图片,或者下载文件的时候,我们看看博客。
Service有两种类型:
以下是Service处理的执行事件及流程图:
1) 本地服务只是处理一些业务,不跟Activity进行交互,这种情况我们只需要使用startService及stopService即可。
在使用的之前调用如下代码:
Intent i = new Intent("abc.cdf.xxxx"); Bundle bundle = new Bundle(); bundle.putInt("aa", 11); i.putExtras(bundle); startService(i);
方法说明:startService(Intent intent)
在退出或者结束的时候,调用stopService即可
stopService(i);
方法说明:stopService(Intent intent)
2) 本地服务需要与Activity进行交互,那么我们就要使用bindService及unbindService
Intent i = new Intent("abc.bdf.xxxx"); bindService(i, connection, Context.BIND_AUTO_CREATE);
unbindService(connection);
方法说明:
boolean bindService(Intent service, ServiceConnection conn, int flags)
void unbindService(ServiceConnection conn)
3) 远程服务(remote),不在一个应用中,也是使用bindService及unbindService
接口描述语言(AIDL)来定义远程服务的接口, 新建aidl文件,系统会自动生成aidl对应的.java文件
事例下载地址1,转自 http://yangguangfu.iteye.com/blog/699306
事件下载地址2
事件中几点说明:
图示1:
<service android:name=".receiverservice.BindMusicPlayerService" >
<intent-filter>
<action android:name="com.yang.bindMusic22" />
</intent-filter>
</service>
11.其中android:name这个是指的类,系统会根据默认的包,找到对应的java文件,
android:name=".receiverservice.BindMusicPlayerService这个系统找到com.yang.main.receiverservice.BindMusicPlayerService。
如果你写成android:name="receiverservice.BindMusicPlayerService"那么系统会到com.yang.mainreceiverservice.BindMusicPlayerService找文件,
然后系统就会直接Crashed
12. <action android:name="com.yang.bindMusic22" />
这里的action的name是你自已指定的名称,这个一般会用上你的包,保持唯一即可,假如这里是com.yang.bindMusic22那么
你在代码中调用service的时候,也要跟这个一样即可,
这里再引用二文,说的也挺详细:
http://www.cnblogs.com/yejiurui/p/3429451.html
http://blog.csdn.net/xiaanming/article/details/9750689
http://blog.csdn.net/ryantang03/article/details/8683921 广播的方式
在Service中处理业务,并且将结果发送广播,然后在Activity的注册广播接收器,接收到广播之后更新UI
这种方式只要注册接收器的都可以接收到广播信息。