绑定Service需要调用

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

传入一个ServiceConnection 对象,该对象是一个接口,实例化时需要实现该接口,它的作用就是获得Service的IBinder对象,通过IBinder对象可以实现与Service的通信。

Service的的代码:

 package com.example.servicetest;

 import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; public class BindServiceTest extends Service {
private int count = 0;
private boolean quit = false;
private MyBinder mBinder = new MyBinder(); public class MyBinder extends Binder {
public int count() {
return count;
}
} @Override
public IBinder onBind(Intent arg0) {
Log.i("csx", "onBind");
return mBinder;
} @Override
public void onCreate() { super.onCreate();
Log.i("csx", "onCreate");
new Thread() { @Override
public void run() {
while (!quit) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) { e.printStackTrace();
}
count++; } } }.start();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("csx", "onStartCommand");
return START_STICKY;
} @Override
public boolean onUnbind(Intent intent) {
Log.i("csx", "onUnbind");
return true;
} @Override
public void onDestroy() {
super.onDestroy();
this.quit = true;
Log.i("csx", "onDestroy");
} }

组件的代码:

 package com.example.servicetest;

 import com.example.servicetest.BindServiceTest.MyBinder;

 import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends ActionBarActivity {
public static final String SERVICE_ACTION = "com.example.servicetest.BindServiceTest";
Button bindButton, unbindButton, stateButton;
ServiceConnection conn;
BindServiceTest.MyBinder mBinder;
boolean isBind = false; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindButton = (Button) findViewById(R.id.button_bind);
unbindButton = (Button) findViewById(R.id.button_unbind);
stateButton = (Button) findViewById(R.id.button_get_state); conn = new ServiceConnection() { @Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("csx", "onServiceConnected");
mBinder = (MyBinder) service; // 连接service之后将service中实现的Binder返回给本地声明的Binder } @Override
public void onServiceDisconnected(ComponentName name) {
Log.i("csx", "onServiceDisconnected");// 意外断开连接会调用该函数 } }; bindButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent service = new Intent();
service.setAction(SERVICE_ACTION);
bindService(service, conn, BIND_AUTO_CREATE);// 绑定服务
isBind = true; }
}); unbindButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (!isBind) {
Toast.makeText(MainActivity.this, "请先绑定服务", Toast.LENGTH_SHORT).show();
return; } unbindService(conn);// 解除绑定服务
isBind = false; }
}); stateButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (!isBind) {
Toast.makeText(MainActivity.this, "请先绑定服务", Toast.LENGTH_SHORT).show();
return; }
Toast.makeText(MainActivity.this, "" + mBinder.count(), Toast.LENGTH_SHORT).show();// 通过mBinder获取service内部的数据 }
}); }
}

绑定本地Service并与之通信的更多相关文章

  1. Android菜鸟的成长笔记(18)——绑定本地Service并与之通信

    在上一篇中介绍了Service与Activity的区别及Service两种启动方式中的第一种启动方式startService(). 我们会发现用startService().stopService() ...

  2. 绑定本地Service并与之通信-----之二

    import android.os.Bundle;import android.os.IBinder;import android.app.Activity;import android.app.Se ...

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

    import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os. ...

  4. Android开发学习之路-Service和Activity的通信

    在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 // 创建一个服务,然后在onBind()中返 ...

  5. Android Service、IntentService,Service和组件间通信

    Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...

  6. 绑定本地的Session

    绑定本地的Session图示解析: 代码的结构: 代码: SaveServlet.java package com.itheima.servlet; import java.io.IOExceptio ...

  7. C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service

    关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关,后面发现坑比较多,弄起来比较麻烦,就放弃了.目前写完了查看 Kubernetes Service 信息.创建 ...

  8. 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置

    本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...

  9. socket的bind函数是不是只能绑定本地IP,不能绑定外网IP么?

    参考: https://bbs.csdn.net/topics/391024376 别瞎猜测. 所谓bind,就是指绑定本地接受端口. 指定ip,是为了分辨多ip主机. --------------- ...

随机推荐

  1. about云开发虚拟化资源汇总,持续更新

    H3C实验手册H3C实验手册内容包括:1.帧中继典型配置举例一2.典型访问列表和地址转换综合应用配置案例3.交换机基本配置4.轮循DCC配置举例5.X.25典型配置举例6.MultiLink PPP配 ...

  2. Codeforces245H - Queries for Number of Palindromes(区间DP)

    题目大意 给定一个字符串s,q个查询,每次查询返回s[l-r]含有的回文子串个数(题目地址) 题解 和有一次多校的题目长得好相似,这个是回文子串个数,多校的是回文子序列个数 用dp[i][j]表示,s ...

  3. python 实战

    用Python写一个真正的Web App! 目标 我们设定的实战目标是一个Blog网站,包含日志.用户和评论3大部分. 比如webpy.org上就提供了一个Blog的例子,目测也就100行代码. 我们 ...

  4. hdoj 5522 Numbers

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5522 水题:暴力过 #include<stdio.h> #include<strin ...

  5. IOS 中runtime 不可变数组__NSArray0 和__NSArrayI

    IOS 中runtime 不可变数组__NSArray0 和__NSArrayI 大家可能都遇到过项目中不可变数组避免数组越界的处理:runtime,然而有时候并不能解决所有的问题,因为类簇不一样 # ...

  6. 单位内部DNS架设及域名解析服务

    越来越多的企业将企业内部局域网通过光缆.交换机等高速互连设备连接起来,形成较大规模的中型网络,网络上的主机和用户也随之日渐增多.作为 Internet的缩影,企业内部网上的各类服务器(如WWW服务器. ...

  7. 借助Ant工具,实现快速开发

    当一个项目大了以后,每次重新编译,打包,运行等就会变得复杂.费时.重复,在c语言中有make脚本进行这些工作的批量完成,那么在java中,我们可以使用Ant. Ant是一个构建工具,可以完成这些任务: ...

  8. SEAndroid安全机制对Binder IPC的保护分析

    在SEAndroid安全机制中,除了文件和属性,还有Binder IPC须要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.比如,应用程序都是Binder IPC请求訪问系 ...

  9. [Javascript] Create an Array concatAll method

    In addition to flat Arrays, programmers must often deal with nested Arrays. For example let's say we ...

  10. BLE 广播数据解析

    从上一篇GATT Profile 简介中提到过,BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 广播模式 BLE ...