绑定本地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主机. --------------- ...
随机推荐
- HW4.43
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- HDU-4414 Finding crosses 水题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4414 直接暴力判断即可. //STATUS:C++_AC_15MS_232KB #include &l ...
- POJ2184Cow Exhibition (01背包变形)
思路一下子就想到了,转移方程却没想好,看到网上一个的思路相同的代码,改的转移方程. 同时dp全部初始化为负无穷,需要注意一下. AC代码如下: /*************************** ...
- php&mysql
更新语句 $query='update num set num='.$counter.'where id=1'; ....................这个查询失败 $query='upd ...
- 学习并使用了两种linq to entity 的实现sql关键字in的查询方法
//构造Lambda语句 private static Expression<Func<TElement, bool>> BuildWhereInExpressi ...
- Zabbix lld发现磁盘监控
一.软件版本 操作系统:CentOS-6.5-x86_64 zabbix版本:3.0.3 二.脚本编写: 1.python版本: #!/usr/bin/env python import json i ...
- [HAOI2012] 容易题
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的 ...
- Android架构分析之Android消息处理机制(二)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的样例,本文我们 ...
- 机房收费系统(VB.NET)——存储过程实战
最初接触存储过程是在耿建玲老师的视频里,当初仅仅是草草过了一遍.仅仅是有了个印象.知道了这个名词:大二时也有SqlServer数据库这门课,只是老师没讲,自己也没看:真正对存储过程的了解来自于自学考试 ...
- 关于android应用--内存的优化
以下内容为转载自网上,然后自己加工贴合到一块的: 原文地址:http://www.cnblogs.com/frydsh/archive/2012/12/09/2810601.html http://w ...