绑定本地Service并与之通信
绑定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并与之通信的更多相关文章
- Android菜鸟的成长笔记(18)——绑定本地Service并与之通信
在上一篇中介绍了Service与Activity的区别及Service两种启动方式中的第一种启动方式startService(). 我们会发现用startService().stopService() ...
- 绑定本地Service并与之通信-----之二
import android.os.Bundle;import android.os.IBinder;import android.app.Activity;import android.app.Se ...
- 绑定本地Service并与之通信-----之一
import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os. ...
- Android开发学习之路-Service和Activity的通信
在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 // 创建一个服务,然后在onBind()中返 ...
- Android Service、IntentService,Service和组件间通信
Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...
- 绑定本地的Session
绑定本地的Session图示解析: 代码的结构: 代码: SaveServlet.java package com.itheima.servlet; import java.io.IOExceptio ...
- C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service
关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关,后面发现坑比较多,弄起来比较麻烦,就放弃了.目前写完了查看 Kubernetes Service 信息.创建 ...
- 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置
本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...
- socket的bind函数是不是只能绑定本地IP,不能绑定外网IP么?
参考: https://bbs.csdn.net/topics/391024376 别瞎猜测. 所谓bind,就是指绑定本地接受端口. 指定ip,是为了分辨多ip主机. --------------- ...
随机推荐
- boj1267 Infinite’s Cave 树形dp + 背包
题目链接:http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=1267 / ...
- Oracle10g/11g 在SUSE/RHEL上的安装与配置
在过去对众多项目的支撑过程中,Oracle作为首选数据库,其安装与配置过程成了重复性最多的工作之一.在此,我进行了总结,并分享出来,希望能对大家有所帮助.随着Oracle版本的提升,从9i -> ...
- JavaScript- The Good Parts Chapter 5 Inheritance
Divides one thing entire to many objects;Like perspectives, which rightly gazed uponShow nothing but ...
- 安装完Ubuntu 14.04要做的九件事
www.linuxidc.com/Linux/2014-04/100411.htm 1.看看有哪些新特性 安装完之后的第一件事肯定是看看Ubuntu 14.04有哪些新的特性. Ubuntu 14.0 ...
- 保留脚本中变量(dot)
脚本 d:\dot.ps1 内容如下: $hostwrite-host "hh"$m="pp"$a ="cc" 通过 . 方式运行脚本 ...
- Derby使用2—C/S模式
零.回顾 这部分先来回顾一下上一篇博客中的主要内容.上一篇博客中主要简单介绍了Derby数据的历史,特点,安装以及使用的两种模式.这篇文章主要介绍这两种模式中的一种模式 一.启动服务端程序 第一部分主 ...
- SilkTest天龙八部系列4-ChildWin
一直觉得SilkTest的ChildWin不好理解,今天大致看了一下,其实它和DialogBox每啥区别,也是一种window类型.帮助里面说,典型的ChildWin就是文档窗口.在Windows上, ...
- [Javascript] Adding Shapes to Maps with Leaflet and GeoJSON
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Java生成word文档
itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址: ...
- QT线程(一):线程类
线程之间共享数据,但又单独执行: QT线程QThread是平台无关的: 通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread: 1.线程优先级 总共8个优先级:线程 ...