Android---42---绑定本地Service并与之通信



绑定本地Service并与之通信:

应当使用bindService和unbindService方法启动、关闭Service。

bindService (Intent service , ServiceConnection conn ,int flags);

解释参数:

service:该参数通过Intent指定要启动的Service

conn:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的链接情况。

当访问者与Service之间连接成功时将回调该ServiceConnection对象的onServiceConnected(ComponentName name,IBinder service)方法;

当Service所在的宿主进程由于异常中止或由于其他原因终止,导致该Service与访问者之间

断开连接时回调该ServiceConnection对象的onServiceDisconnected(ComponentName  name )方法。

flags:指定绑定时是自动创建Service。该参数可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)。

ServiceConnection :Interface for monitoring the state of an application service

是用来监视应用服务状态的接口。

此接口中就只有两个方法:

onServiceConnected(ComponentName name, IBinder service) :服务连接时调用

onServiceDisconnected(ComponentName name) :断开连接时调用

当开发Service类时,该Service类必须提供一个IBinder onBind(Intent intent)方法,在绑定本地Service的情况下

onBind方法所返回的IBinder对象将会传给ServiceConnection对象里onServiceConnected方法的service参数。

这样访问者就可以通过IBinder对象与Service进行通信。

在实际开发中一般采用继承Binder(IBinder 的实现类)的方式来实现自己的IBinder对象。

本地Service类:

public class BindService extends Service {

	private int count;
	private boolean quit;
	//定义onBinder返回的对象
	private MyBinder binder = new MyBinder();
	//通过继承Binder类来实现IBinder类
	public class MyBinder extends Binder {
		public int getCount() {
		//获取Service的运行状态
			return count;
		}
	}
	//必须要实现的方法,绑定该Service时回调,返回IBinder对象
	@Override
	public IBinder onBind(Intent intent) {
		System.out.println("Service is Binded");
		return binder;
	}

	//Service被创建时回调的方法
	@Override
	public void onCreate() {
		super.onCreate();
		System.out.println("Service is created");
		new Thread() {
			@Override
			public void run() {
				while (!quit) {
					try {
						Thread.sleep(1000);
					} catch (Exception e) {
						// TODO: handle exception
					}
					count++;
				}
			}
		}.start();
	}

	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("Service is Unbinded");
		return true;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		this.quit = true;
		System.out.println("Service is Destoryed");
	}

}

绑定它:

定义一个Activity绑定该Service。

在Activity中通过MyBinder对象来访问Service的内部。

public class BindServiceTest extends Activity {
	Button bind, unbind, getServiceStatus;
	BindService.MyBinder binder;

	private ServiceConnection conn = new ServiceConnection() {

		@Override
		public void onServiceDisconnected(ComponentName name) {
			System.out.println("--Service Disconnected--");
		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			System.out.println("--Service Connected--");
			binder = (MyBinder) service;
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		bind = (Button) findViewById(R.id.bind);
		unbind = (Button) findViewById(R.id.unbind);
		getServiceStatus = (Button) findViewById(R.id.getServiceStatus);

		final Intent intent = new Intent();
		intent.setAction("com.example.bindservicedemo.BindService");

		bind.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 绑定指定Service
				bindService(intent, conn, Service.BIND_AUTO_CREATE);
			}
		});
		unbind.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 解除绑定Service
				unbindService(conn);
			}
		});

		getServiceStatus.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 获取并显示Service的count值
				Toast.makeText(BindServiceTest.this,
						"Service的COunt值为:" + binder.getCount(), 1).show();

			}
		});
	}

}

打印结果:

时间: 2024-10-11 18:46:52

Android---42---绑定本地Service并与之通信的相关文章

Android学习笔记二十四.Service入门(二)绑定本地Service并与之通信

绑定本地Service并与之通信    通过上一篇博文的前3步,我们就算完成了一个Service及使用该Service的应用程序(Service为该应用程序的组成部分).但当程序通过startService()和stopService()启动.关闭Service时,Service与访问者之间基本上不存在太多的关联,因此Service和访问者之间也无法进行通信.数据交换.如果我们希望开发的Service能与访问者之间实现方法调用或数据交换,我们可以让访问者使用bindService()和unbin

绑定本地Service并与之通信

绑定Service需要调用 public boolean bindService (Intent service, ServiceConnection conn, int flags): 传入一个ServiceConnection 对象,该对象是一个接口,实例化时需要实现该接口,它的作用就是获得Service的IBinder对象,通过IBinder对象可以实现与Service的通信. Service的的代码: 1 package com.example.servicetest; 2 3 impo

绑定本地Service并与之通信-----之一

import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder; public class BindService extends Service{ private int count; private boolean quit; //定义onBinder方法所返回的对象 private MyBinder binder = new MyBinde

Activity与本地Service的绑定

在Android应用程序中,Activity负责界面的显示,Service负责后台工作,当然后台和界面是需要交互的,所以Activity需要和Service交互. 比较常用的是Activity和本地Service的交互,本文介绍的便是这种,最终实现Activity和Service都能很方便地调用对方的public方法. 其实只要让Activity和Service绑定之后,分别拥有对方的引用就可以了. 以MainActivity和MyService为例 创建一个服务类MyService.java

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(二)

这里主要介绍Service组件的使用. 1.定义一个继承Service的子类 如下: package com.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class defaultService extends Service { int mStartMode; // indicates how to behave if the serv

绑定Service并与之通信

这个例程有三个按钮bindButton.unbindButton.getServiceStatusButton 分别是绑定Service.解除绑定.获取Service状态 BindServiceTest.java  在Activity中绑定本地Service,并获取Service的运行状态 public class BindServiceTest extends Activity { Button bindButton,unbindButton,getServiceStatusButton; /

Android:(本地、可通信的、前台、远程)Service使用全面介绍

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service最基础的知识:Service的生命周期 如果你对Service还未了解,建议先阅读我写的文章: Android四大组件:Service史上最全面解析 目录 1. Service分类 1.1 Service的类型 1.2 特点 2.具体使用解析 2.1 本地Service 这是最普通.最常用的后台服务Service. 2.1.1 使用步骤 步骤1:新建子类继承Service类 需重写父类的onCreate()

10天学通Android开发(2-3)-核心组件Service绑定

通过startService开启的服务,当访问者关闭时,服务仍然存在:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: 如果使用Context.bindService()方法启动服务,则在服务未创建时,系统会调用服务的onCreate()方法,接着调用onBind()方法,这时就访问者与服务已经绑定了,主程序销毁时服务也会终止. 1)绑定服务时,会自动创建服务. 2)如果创建后并启动后再绑定,不会重新创建,一个Service只有一个实例 3)同时启动和绑定服务时,解除绑定服务,但不会