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.参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自 ...
随机推荐
- Fragment 横竖屏切换问题
转自:http://my.oschina.net/u/614511/blog/76444 在默认情况下当发生横竖屏切换时,当前Activity中的fragment都会通过Fragment.instan ...
- C语言课程设计——电影院订票系统
1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电 ...
- 转转转!!Spring MVC控制器用@ResponseBody声明返回json数据报406的问题
本打算今天早点下班,结果下午测试调试程序发现一个问题纠结到晚上才解决,现在写一篇博客来总结下. 是这样的,本人在Spring mvc控制层用到了@ResponseBody标注,以便返回的数据为json ...
- 操作数据类m
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- [html][javascript]父子窗体传值
父窗体 <script type="text/javascript"> newwindow = window.open("b1.html",&quo ...
- ehcache配置:使用Spring+SpringMVC+Mybatis或者有shiro
SSM框架的搭建就不在叙述了 本文主要是讲解在SSM基础上再加上ehcache 1:首先:pom.xml需要的jar <dependency> <groupId>org.myb ...
- 实时计算CEP
实时计算怎么实现: 流计算.....
- linux centos 6.1 安装 redis
1, yum install redis 检测是否有redis 2,没有的话就运行:yum install epel-release 3,再执行 yum install redis
- jenkins显示html样式问题的几种解决方案总结
前言 jenkins上使用HTML Publisher plugin插件生成的html报告样式会丢失,需要设置下才能正常显示. 一.样式丢失 1.官方文档的解释如下,参考地址https://stack ...
- TLS协议扫盲(握手,非对称加密,证书,电子签名等)
想学习TLS协议最好的方法应该是去看RFC,但如果对安全传输协议没有一些基本认识的人很难一上来就读懂RFC里面的种种细节和设计原则,所以这里为了能够进一步去弄懂TLS协议,把一些基本的知识放在这里,算 ...