在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. Tomcat 容器的设计和实现

    Tomcat 容器是对 Servlet 规范的实现,也称为 Servlet 引擎.在分析 Tomcat 容器的设计和实现之前,首先简单了解一下 Servlet 规范,弄清楚 Tomcat 究竟要实现什 ...

  2. 马士兵Spring-dataSource

    一.简单使用例子: 这里使用commons.dbcp: beanx.xml配置: <?xml version="1.0" encoding="UTF-8" ...

  3. Java-Runoob-高级教程-实例-字符串:06. Java 实例 - 字符串查找

    ylbtech-Java-Runoob-高级教程-实例-字符串:06. Java 实例 - 字符串查找 1.返回顶部 1. Java 实例 - 字符串搜索  Java 实例 以下实例使用了 Strin ...

  4. springboot中对yaml文件的解析

    一.YAML是“YAML不是一种标记语言”的外语缩写 (见前方参考资料原文内容):但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名.它是一种直观的能够被电脑识别的数据序列化 ...

  5. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块

    HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在 ...

  6. All sentinels down, cannot determine where is mymaster master is running...

    修改配置的哨兵文件 vim /sentinel.conf 将保护模式关闭

  7. IntelliJ Idea 常用快捷键列表 (需整理下) https://blog.csdn.net/dc_726/article/details/42784275

    [常规] https://blog.csdn.net/dc_726/article/details/42784275https://jingyan.baidu.com/article/59a015e3 ...

  8. linux下实时查看log

    1.先切换到:cd usr/local/tomcat5/logs2.tail -f catalina.out3.这样运行时就可以实时查看运行日志了 Ctrl+c 是退出tail命令. 顺便讲一下lin ...

  9. 迷你MVVM框架 avalonjs 1.1发布

    本版本添加了许多有用的功能,得益于用户量的增大,一些隐性BUG也暴露出来Fix掉了.强烈建议升级! 优化扫描流程: ms-skip(0) --> ms-important(1) --> m ...

  10. 在Centos7下安装Python+Selenium+Firefox学习环境

    Selenium 一自动化测试工具.它支持 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测 ...