在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. c++中头文件与实现文件的关系

    转自:http://xiangyanglai.blog.163.com/blog/static/2047252022012715103338279/ 关于两者以前的关系,要从N年以前说起了~ long ...

  2. poj 1930 Dead Fraction(循环小数化分数)

    Dead Fraction Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3478   Accepted: 1162 Des ...

  3. MacBook设置定时关机

    Mac定时关机.重启.休眠命令行 - 有梦想的蜗牛 - 博客频道 - CSDN.NET http://blog.csdn.net/showhilllee/article/details/4406727 ...

  4. [转]Jsp 与 JavaBean

    JavaBean 是一个遵循特定写法的 Java 类,它有以下特点: 1. Java 类具有一个无参的构造函数 2. 属性必须私有化. 3. 私有化的属性通过 public 类型的方法暴露给其它程序, ...

  5. Java HashMap 遍历方式探讨

    JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历. keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从 ...

  6. solr精确查询,查询关键字分词后,指定满足匹配所有

    一.solr查询,查询配置了查询分词器的字段,默认会对查询关键字做分词处理 1.如查询关键字F1501ZY000011,使用solr7自带的中文分词器,默认会分词为:f,1501,zy,000011 ...

  7. python新里程

    为什么要学Python: 2018年6月开始自学Python.因为自己目前做Linux运维,感觉自己还需要掌握一门开发语言,在Java.python.php之间毫不犹豫的选择了Python,因为Pyt ...

  8. JS 根据url 下载

    一. window.location="htpp://www.baidu.com/test.rar"; 二. var $form = $('<form method=&quo ...

  9. c#正则获取html里面a标签href的值

    获取单个a中href的值: string str = "<a href=\"http://www.itsve.com\">下载</a>" ...

  10. (4)activiti工作流引擎之uel表达式

    有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来? 这里就需要使用到activiti启动流程实例时设置一个流程实例的busines ...