一般情况下我们使用startService(Intent service)来启动一个服务,但这种情况下无法得到Service对象的引用,通过bindService方法启动服务则可以实现此功能。下面给一个小例子演示一下:
1.调用者
- package com.zhf.local;
-
-
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
-
-
-
-
-
-
- public class LocalServiceActivity extends Activity {
-
- private MyService myService;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- Intent intent = new Intent(this, MyService.class);
- bindService(intent, connection, Context.BIND_AUTO_CREATE);
- }
-
- private ServiceConnection connection = new ServiceConnection() {
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- myService = null;
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- myService = ((MyService.MyBinder) service).getService();
- System.out.println("Service连接成功");
-
- myService.excute();
- }
- };
-
- protected void onDestroy() {
- super.onDestroy();
- unbindService(connection);
- };
- }
2.服务者
- package com.zhf.local;
-
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
-
- public class MyService extends Service {
- private final IBinder binder=new MyBinder();
- @Override
- public IBinder onBind(Intent intent) {
- return binder;
- }
-
- public class MyBinder extends Binder{
- MyService getService(){
- return MyService.this;
- }
- }
-
- public void excute(){
- System.out.println("通过Binder得到Service的引用来调用Service内部的方法");
- }
-
- @Override
- public void onDestroy() {
-
- super.onDestroy();
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
-
- System.out.println("调用者退出了");
- return super.onUnbind(intent);
- }
- }
分享到:
相关推荐
Android bindservice失败解决方法 现象: this.bindService(bindIntent, conn, Context.BIND_AUTO_CREATE); 相同的代码以前使用一直很正常,但最近在项目中使用却一直绑定失败,bindservice返回false。 原因: 使用...
在Android应用开发中,"bindService"是一个关键的组件交互方式,它允许应用程序与服务进行交互,特别是当需要长时间运行的后台任务时。服务(Service)是Android四大组件之一,设计用于在没有用户界面的情况下执行...
在Android开发中,`bindService()` 是一个关键的API,用于连接到远程服务,以便进行更复杂的交互。在这个例子中,我们有两个项目:`MyApplication` 和 `AIDLClient`,它们分别扮演服务提供者和服务使用者的角色。...
在Android应用开发中,`bindService()`方法是用于将客户端(通常是Activity或BroadcastReceiver)与服务(Service)进行连接的关键操作。服务是Android系统中的一种组件,它可以在后台执行长时间运行的任务,即使...
Android Service与BroadcastReceiver、bindService示例详解,代码非常详细,详解博客网址:http://blog.csdn.net/sunboy_2050/article/details/7364024
Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况。如果想了解startService相关的...
在Android系统中,服务(Service)是一种用于在后台执行长时间运行操作而不与用户交互的应用组件。"bind Service"是Android中一种特殊的启动服务的方式,它主要用于客户端和服务端之间的交互,而不是像startService...
【BindService】是Android四大组件之一的Service的一个高级用法,相比普通的启动Service(startService),它提供了更紧密的交互方式。在Android应用开发中,Service通常用于在后台执行长时间运行的任务,例如播放...
总结来说,理解并熟练掌握 `startService` 和 `bindService` 是 Android 开发中的必备技能。开发者需要根据实际需求选择合适的服务启动方式,以确保应用的稳定性和效率。同时,对于 `Service` 的生命周期管理和资源...
在Android系统中,`bindService`是一个至关重要的API,它用于连接到一个正在运行的Service。Service是Android四大组件之一,主要用于在后台执行长时间运行的操作,例如音乐播放、网络通信等。`bindService`提供了...
本文将深入探讨"Android startService, bindService, Aidl service基础全"这一主题,按照学习顺序依次讲解`testService`, `testBindService`, `testIntentService`, `testAidlClient+testAIDL`。 首先,我们来看`...
实例详解Android中startService()和bindService()的区别。 说明详见http://blog.csdn.net/a343902152/article/details/50857316
AIDL:Android Interface Definition Language,即Android接口定义语言。 Service跨进程传递数据需要借助aidl,主要步骤是这样的: 编写aidl文件,AS自动生成的java类实现IPC通信的代理 继承自己的aidl类,实现里面...
本示例"BindService_Demo"将着重讲解如何在Android中使用`Service`,特别是`Service`与`Activity`之间的绑定机制。下面我们将深入探讨相关知识点。 1. **Service基本概念**: `Service` 是Android四大组件之一...
在Android应用开发中,音乐播放器的实现是一个常见的需求,涉及到多媒体处理、用户界面设计以及服务(Service)的使用。本篇文章将详细讲解如何利用`bindService`和`startService`来实现音乐播放功能,这两种服务...