Android-bindService本地服务-初步-Service返回对象
在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢?
答:是因为bindService可以实现Activity-->Service里面的方法并返回数据给Activity,可以理解 在自身APP过程中Service与Activity进行通讯(本地服务)
bindService还可以实现另外强大的功能,需要结合AIDL,实现跨进程Service与Activity进行通讯(远程服务)
定义接口来增强服务返回到Binder:
package liudeli.service1.service.inter; import liudeli.service1.service.domain.Person; public interface IPerson { /**
* 通过ID查询Person对象
* @param id
*/
public Person queryPersonByID(int id); }
服务处理onBind方法:
package liudeli.service1.service; import android.app.Service; import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; import liudeli.service1.service.domain.Person;
import liudeli.service1.service.inter.IPerson; public class MyService3 extends Service { @Override
public IBinder onBind(Intent intent) {
return new MyBinder();
} class MyBinder extends Binder implements IPerson { /**
* 通过ID查询Person对象
*
* @param id
*/
@Override
public Person queryPersonByID(int id) {
Person person = null;
switch (id) {
case 1:
person = new Person(1, "张三", 30);
break;
case 2:
person = new Person(2, "李四", 20);
break;
case 3:
person = new Person(3, "赵六", 26);
break;
default:
person = new Person(9,"王五", 40);
break;
}
return person;
}
}
}
MainActivity3调用服务到方法:
package liudeli.service1; import android.app.Activity; import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View; import liudeli.service1.service.MyService3;
import liudeli.service1.service.inter.IPerson; public class MainActivity3 extends Activity { private final static String TAG = MainActivity3.class.getSimpleName(); private MyServiceConnection connection = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3); connection = new MyServiceConnection();
} public void bindService(View view) {
bindService(new Intent(this, MyService3.class), connection, BIND_AUTO_CREATE);
} public void unBindService(View view) {
unbindService(connection);
} private IPerson person = null; /**
* 服务连接接口具体实现对象
*/
class MyServiceConnection implements ServiceConnection { /**
* 与服务进行连接
* @param name
* @param service
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("MyService3", "与服务进行连接 name:" + name); person = (IPerson) service;
} /**
* 与服务断开连接
* @param name
*/
@Override
public void onServiceDisconnected(ComponentName name) {
person = null;
System.gc();
}
} @Override
protected void onDestroy() {
super.onDestroy();
if (null != connection) {
unbindService(connection);
}
} public void testMothod(View view) {
if (null != person) {
liudeli.service1.service.domain.Person p = person.queryPersonByID(1);
Log.d("MyService3", "p.toString" + p.toString());
}
}
}
Android-bindService本地服务-初步-Service返回对象的更多相关文章
- Android四大组件--服务(Service)
1. startService和bindService的区别 1. startService: 生命周期: onCreate---onStartCommand---onDestory 与服务的通讯: ...
- Android-bindService本地服务-初步
在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢? 答:是因为bindService可以实现Activity-->S ...
- 入职小白随笔之Android四大组件——服务(Service)
Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...
- android测试本地服务调试流程
我今天调试的整个过程 1,安卓发现连不上本地的tomcat 2,使用浏览器直接尝试,发现可以连上 3,怀疑是安卓APP和浏览器访问有差异,后上网搜索不到APP,只有浏览器尝试 再不就是改I ...
- Android Service学习之本地服务
Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...
- Android服务之Service(其一)
android中服务是运行在后台的东西,级别与activity差不多.既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服务Service来播放音乐,或者记录你 ...
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有 ...
- Android服务之Service
android中服务是运行在后台的东西,级别与activity差不多.既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服务Service来播放音乐,或者记录你 ...
- Android开发之如何保证Service不被杀掉(前台服务)
序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill.参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自 ...
随机推荐
- hackerrank Week of Code 31
https://www.hackerrank.com/contests/w31/challenges Beautiful Word 模拟 Accurate Sorting 检查每个数字距离原位是否都不 ...
- LeetCode 177. Nth Highest Salary
https://leetcode.com/problems/nth-highest-salary/description/ Write a SQL query to get the nth highe ...
- 使用maven构建基本的web项目结构
由于当前公司在组织进行项目基本结构的整理,将以前通过eclipse/ ant 方式构建的项目向maven上迁移,于是便进行maven项目方面的调研. 对于maven项目,基本的结构已经在标准文件中: ...
- Ubuntu12.10下Python(pyodbc)访问SQL Server解决方案
一.基本原理 请查看这个网址,讲得灰常详细:http://www.jeffkit.info/2010/01/476/ 二.实现步骤 1.安装linux下SQL Server的驱动程序 安装Free ...
- window server2008 r2 限制远程访问用户数量
在服务器端设置 修改组策略 1,开始-运行-gpedit.msc-计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-限制连接数量-开启并改为1
- PDF预览之PDFObject.js总结
get from:PDF预览之PDFObject.js总结 PDFObject.js - 将PDF嵌入到一个div内,而不是占据整个页面(要求浏览器支持显示PDF,不支持,可配置PDF.js来实现 ...
- 概率分布之间的距离度量以及python实现
1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...
- 开启php的xdebug扩展及phpstorm配置xdebug,chrome调试插件组合
一. 开启php xdebug扩展 注意: 1. 原生php各版本需对应各自的xdebug版本,可到xdebug上对应下载 2. 若用wampserver等环境,wampse ...
- 搭建 redis 集群 (redis-cluster)
一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址 ...
- java编写binder服务实例
文件目录结果如下: 一. 编写AIDL文件 IHelloService.aidl: /** {@hide} */ interface IHelloService { void sayhello(); ...