在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢?

答:是因为bindService可以实现Activity-->Service里面的方法并返回数据给Activity,可以理解 在自身APP过程中Service与Activity进行通讯(本地服务)

  bindService还可以实现另外强大的功能,需要结合AIDL,实现跨进程Service与Activity进行通讯(远程服务)

定义接口扩展,增强版Binder:

package liudeli.service1.service.inter;

public interface IStudent {

    /**
* 定义通过ID查询姓名
* @param id 传入ID
* @return 返回姓名
*/
public String queryNameByID(int id); }

Service具体代码处理:

package liudeli.service1.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; import liudeli.service1.service.inter.IStudent; public class MyService2 extends Service { private static final String TAG = MyService2.class.getSimpleName(); @Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "我被绑定了");
return new MyBinder();
} class MyBinder extends Binder implements IStudent { /**
* 定义通过ID查询姓名
*
* @param id 传入ID
* @return 返回姓名
*/
@Override
public String queryNameByID(int id) {
String result;
switch (id) {
case 1:
result = "张三";
break;
case 2:
result = "李四";
break;
case 3:
result = "王五";
break;
default:
result = "赵二";
break;
}
return result;
}
} @Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "我被解绑了");
return super.onUnbind(intent);
}
}

MainActivity2调用测试:

  // ---------------------------------- 绑定服务

    public void bindService(View view) {
bindService(new Intent(MainActivity2.this, MyService2.class), connection, Context.BIND_AUTO_CREATE);
} public void unBindService(View view) {
unbindService(connection);
} private IStudent iStudent; /**
* 服务连接接口
*/
private ServiceConnection connection = new ServiceConnection() { /**
* 已经连接到服务
* @param name 服务到详细地址等
* @param service 服务返回过来到结果
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("MyService2", "已经连接到服务 name:" + name); // 返回到接口,需要强制转成具体定义到接口
iStudent = (IStudent) service;
} /**
* 断开与服务到连接
* @param name 服务到详细地址等
*/
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d("MyService2", "断开与服务到连接 name:" + name);
iStudent = null;
}
}; @Override
protected void onDestroy() {
super.onDestroy();
if (null != connection) {
unbindService(connection);
}
} public void test(View view) {
if (null != iStudent) {
String result = iStudent.queryNameByID(2);
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}
}

Android-bindService本地服务-初步的更多相关文章

  1. Android-bindService本地服务-初步-Service返回对象

    在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢? 答:是因为bindService可以实现Activity-->S ...

  2. android测试本地服务调试流程

    我今天调试的整个过程 1,安卓发现连不上本地的tomcat 2,使用浏览器直接尝试,发现可以连上 3,怀疑是安卓APP和浏览器访问有差异,后上网搜索不到APP,只有浏览器尝试       再不就是改I ...

  3. Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...

  4. Android本地服务

    一.服务生命周期总结 (一).单独开启服务,并没有绑定服务Activity中调用startService(),服务的lifecycle:onCreate()→onStartCommand()→onSt ...

  5. LoadRunner+Android模所器实现抓包并调试本地服务端

    步骤就是 1:新建LR脚本.协议选择Mobile Application - HTTP/HTML 2:在record里选择第三个:Record Emulator........ 3:  选择下一步后, ...

  6. android service 本地 远程 总结

    android编写Service入门 android SDK提供了Service,用于类似*nix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service) ...

  7. Android学习笔记--服务(Service)

    1.服务概述 1.服务是Android四大组件之一,在使用上可以分为本地服务和远程服务,本地服务是指在不影响用户操作的情况下在后台默默的执行一个耗时操作,例如下载,音频播放等.远程服务是指可以供其他应 ...

  8. Android中的服务

    Android中的服务 四大组件都是运行在主线程 Android中的服务,是在后台运行 .可以理解成是在后台运行并且是没有界面的Activity. Foreground process 前台进程 ,用 ...

  9. Android四大组件--服务(Service)

    1. startService和bindService的区别 1. startService: 生命周期: onCreate---onStartCommand---onDestory 与服务的通讯: ...

随机推荐

  1. scrollTop、offsetHeight和offsetTop等属性用法详解--转转转

    scrollTop.offsetHeight和offsetTop等属性用法详解: 标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼 ...

  2. bin sh git@github.com no such file or directory

    window下使用git: 输入命令:git clone git @github.com:Alan0521/dotvim.git 出现/bin/sh:git@github.com no such fi ...

  3. mybatis 学习五 二级缓存不推荐使用

    mybatis 二级缓存不推荐使用 一 mybatis的缓存使用. 大体就是首先根据你的sqlid,参数的信息自己算出一个key值,然后你查询的时候,会先把这个key值去缓存中找看有没有value,如 ...

  4. VisualStudio2012轻松把JSON数据转换到POCO的代码(转)

    VisualStudio2012轻松把JSON数据转换到POCO的代码 在Visual Studio 2012中轻松把JSON数据转换到POCO的代码,首先你需要安装Web Essentials 20 ...

  5. UNITY插件信息收集

    2018.8.7 UNITY超级优化神器 : Amplify Impostors

  6. 迷你MVVM框架 avalonjs 学习教程8、属性操作

    属性操作是DOM操作很大的一块,它包括类名操作,表单元素的value属性操作,元素固有属性的管理,元素自定义属性的管理,某些元素的一些布尔属性的操作.大多数情况下,元素属性的值是字符串类型,我们称之为 ...

  7. $or操作符

    [$or操作符] The $or operator performs a logical OR operation on an array of two or more <expressions ...

  8. Docker构建redis cluster集群

    准备工作 安装gcc ruby 解压编译redis Redis 是 c 语言开发的.安装 redis 需要 c 语言的编译环境.如果没有 gcc 需要在线安装. yum install gcc-c++ ...

  9. Qt Thread

    Threading Classes (Qt help manual key words) These Qt Core classes provide threading support to appl ...

  10. Oracle ADF 创建序列

    双击VO,打开Attribute 标签页在弹出的窗口中选择Default Value Type 为“Expression”, value 的值为:(new oracle.jbo.server.Sequ ...