我的android 第37天 -服务--Service(二)
二、建立能与Activity进行相互通信的本地服务
通过startService()和stopService()启动关闭服务。适用于服务和Activity之间没有调用交互的情况。如果相互之间需要方法调用或者传递参数,需要使用bindService()和unbindService()方法启动关闭服务。
采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法,这个时候调用者和服务绑定在一起。如果客户端要与服务进行通信,那么,onBind()方法必须返回Ibinder对象。如果调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。
Activity与服务进行通信,开发人员通常把通信方法定义在接口里,然后让Ibinder对象实现该接口,而Activity通过该接口引用服务onBind()方法返回的Ibinder对象,然后调用Ibinder对象里自定义的通信方法。例子如下:
本例是一个本地服务,即服务与Activity在同一个应用内部。
接口:
publicinterface ICountService {
public int getCount();
}
服务类:
publicclass CountServiceextends Service {
privatebooleanquit;
privateintcount;
privateServiceBinder serviceBinder =new ServiceBinder();
publicclass ServiceBinderextends Binder implements ICountService {
@Override
public int getCount() {
return count;
}
}
@Override
publicIBinder onBind(Intentintent) {
return serviceBinder;
}
@Override
publicvoid onCreate() {
super.onCreate();
new Thread(new Runnable() {
@Override
public void run() {
while (!quit) {
try{
Thread.sleep(1000);
}catch (InterruptedException e){}
count++;
}
}
}).start();
}
@Override
publicvoid onDestroy() {
super.onDestroy();
this.quit =true;
}
}
客户端Activity:
publicclass ClientActivityextends Activity {
private ICountService countService;
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.bindService(newIntent(this, CountService.class), this.serviceConnection,BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
this.unbindService(serviceConnection);
}
private ServiceConnection serviceConnection =new ServiceConnection() {
@Override
public void onServiceConnected(ComponentNamename, IBinderservice) {
countService = (ICountService)service;//对于本地服务,获取的实例和服务onBind()返回的实例是同一个
int i = countService.getCount();
Log.v("CountService","Count is " + i);
}
@Override
public void onServiceDisconnected(ComponentNamename) {
countService =null;
}
};
}
下载视频代码
相关推荐
第一篇 基础篇 第一章 android概述 第二章 android开发基础 第二篇 技术篇 第三章 android中的资源访问 第四章 android用户界面 ...第十七章 android应用案例--备忘录 第十八章 android应用案例--无线点餐系统
【第一版第三章】老罗Android开发视频--HTTP协议编程(4集) 【第一版第四章】老罗Android开发视频--解析XML数据(3集) 【第一版第五章】老罗Android开发视频--解析JSON数据(4集) 【第一版第六章】老罗Android...
第一讲:Android开发环境的搭建 第二讲:Android系统构架分析和应用程序目录结构分析 第三讲:Android模拟器的使用 emulator 第四讲:Activity入门指南 Activity ...第三十讲:URLConnection和HttpClient使用入门
《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...
04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...
第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统
第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统
第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统
第14章 android综合案例三——基于android的豆瓣网(web 2.0)移动客户端开发 260 14.1 关于豆瓣网和豆瓣网api 260 14.1.1 豆瓣网介绍 260 14.1.2 豆瓣网api介绍 261 14.1.3 豆瓣网api认证 261 14.1.4...
第三章 电话拨号器和发送短信小程序 12 第四章 日志输出和单元测试 17 第五章 数据的存储与访问 19 第六章 SD卡的存取和XML读取 24 第七章 SharedPreferences进行数据存储 38 第八章 SQLITE数据库 42 第九章 ...
第三章. 创建第一个HelloWorld Map 12 1. 创建项目 12 2. 项目结构 14 3. 编码实现 16 第四章. 地图、图层及空间参考 . 18 1. MapView地图组件 18 2. 地图图层(Layer) 21 3. SpatialReference . 26 第五章...
android好书系列,我目前找了两本,先贡献给大家。以后如果有好的资源,再上传和大家分享。 本资源是第一本。 这是一本学习android的好书,我浏览了,是老外著的,高清晰的pdf。为了方便大家学习android,我将本书所...
root@android:/dev # cd /sys/class/i2c-adapter/ root@android:/sys/class/i2c-adapter # ll lrwxrwxrwx root root 1970-01-02 08:31 i2c-0 -> ../../devices/platform/sun5i-i2c.0/i2c-0 lrwxrwxrwx root root ...
[Android开发从零开始].37.Spinner和Auto.Complete控件学习.mp4 52.7MB [Android开发从零开始].38.WebView控件学习.mp4 70.6MB [Android开发从零开始].39.Dialogs学习.mp4 59.9MB [Android开发从零开始].40....
第2章 ANDROID开发环境 3 2.1 ANDROID开发环境搭建流程 3 2.1.1 安装Eclipse ADT Plugin插件 3 2.1.2 安装Android SDK 4 2.1.3 更新Adroid SDK 5 2.1.4 配置Android模拟器 6 2.2 开发工具ECLIPSE介绍 7 第3章 ...
04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...
第14章 Android综合案例三——基于Android的豆瓣网(Web 2.0)移动客户端开发 260 14.1 关于豆瓣网和豆瓣网API 260 14.1.1 豆瓣网介绍 260 14.1.2 豆瓣网API介绍 261 14.1.3 豆瓣网API认证 261 14.1.4...