bindService

bindService用于绑定一个服务。当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。

Activity调用bindService,服务会创建,接着执行onBind方法,该方法返回一个IBinder对象,Activity通过IBinder对象来访问服务里的方法。

bindService方式的一般过程:

①新建类BindService继承Service类。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。

MyBinder提供方法返回BindService实例。

public class MyBinder extends Binder{

public BindService getService(){

return BindService.this;

}

}

实例化MyBinder得到mybinder对象;

MyBinder mybinder =new MyBinder();

重写onBind()方法:

@Override

public IBinder onBind(Intent intent) {

return mybinder;

}

②在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法

ServiceConnection conn=new ServiceConnection(){

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

③在Activity的onCreate()方法里,新建Intent,并绑定服务

Intent intent=new Intent(MainActivity.this,BindService.class);

bindService(intent, conn,BIND_AUTO_CREATE);

conn则是一个代表与service连接状态的类,当我们连接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。如果我们想要访问service中的数据,可以在onServiceConnected()方法中进行实现,

BIND_AUTO_CREATE//一旦绑定服务就自动创建服务

④在Activity的onDestroy里面,添加

unbindService(conn);

如果不加这一步,就会报android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的异常。

bindService()的执行过程如下:

bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()

时间: 2024-10-12 12:32:16

bindService的相关文章

实验7 BindService模拟通信

[目的] 实现启动端和BindService之间的双向通信 [要求] 1) 实现从启动端传递一个数据至BindService端: 2) 实现使用BindService服务播放项目源文件中的音乐: 3) 实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小. 4) 实现在启动端通过“暂停”按钮控制音频暂停播放. [实验环境] 1)PC机 2)操作系统:Windows XP 3)软件: Eclipse, JDK1.6,Android SDK,ADT [实验内容及步骤] 1)设计好音乐设置的xm

实验7 BindService 模拟通信

课程名称 基于Android平台移动互联网开发 实验日期 2016-5-2 实验项目名称 BindService模拟通信 实验地点 S3010 实验类型 □验证型    √设计型    □综合型 学  时 一.实验目的及要求(本实验所涉及并要求掌握的知识点) 1)   实现从启动端传递一个数据至BindService端: 2)   实现使用BindService服务播放项目源文件中的音乐: 3)   实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小. 4)   实现在启动端通过“暂停”

StartService与BindService

效果图 MainActivity.java 1 package com.wangzhen.servicedemo; 2 3 import com.lidroid.xutils.ViewUtils; 4 import com.lidroid.xutils.view.annotation.ContentView; 5 import com.lidroid.xutils.view.annotation.ViewInject; 6 import com.lidroid.xutils.view.annot

[AndroidTips]startService与bindService的区别

Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的. 1 通过startService    Service会经历 onCreate --> onStart    stopService的时候直接onDestroy 如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行.   下次调用者再起来仍然可以stopSer

android bindService() NullPointerException

android app开发中 下面的代码报错误 ,bindService() NullPointerException 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 6

Android Service组件在新进程绑定(bindService)过程

1.首先看两个例子 (1)进程内 Client端 public class CounterService extends Service implements ICounterService { ...... public class CounterBinder extends Binder { public CounterService getService() { return CounterService.this; } } ...... } Server端 public class Ma

理解Android的startservice和bindservice(转)

一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦. 二.那么,什么时候,我们需要使用service呢?         我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点.这就跟我们打开了音乐播放之后

Android开发之bindService()侦听service内部状态

在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 1 public static interface CallBack{ 2 void onDataChange(String data); 3 } 2. 1 private CallBack callBack=null; 2 public void setCallBack(CallBack callB

关于Service中bindService注意的几个问题

最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下: 单独使用bindService(),unbindService()会经历:->onCreate()->onBind()->Service running->onUnbind() -> onDestroy() . 单独使用startService(),stopService()会经历:->onCreate()->onStartComm