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.参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自 ...
随机推荐
- java websocket @ServerEndpoint注解说明
http://www.blogjava.net/qbna350816/archive/2016/07/24/431302.html https://segmentfault.com/q/1010000 ...
- C#中的参数关键字params
class 参数 { public void doSome(string str,params int[] values){ ) { ; i < values.Length; i++) { Co ...
- MySQL my.cnf参数配置优化详解
[b]PS:本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS -100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化.[/b ...
- Protocol入门
参考:http://haoxiang.org/2011/08/ios-delegate-and-protocol/ 介绍: Protocol在iOS中就是协议,简单的理解就是一组函数的集合,这个集合中 ...
- leetcode475
public class Solution { public int FindRadius(int[] houses, int[] heaters) { houses = houses.Distinc ...
- Maven - Deploy war in Tomcat 7 & 8
This article will explain on how to deploy a war fine in to Tomcat 7 through maven build. Note : I h ...
- openAL在mac下播放音源结束时判断处理
音频播放完毕,自然停止 alGetSourcei(source[0], AL_BUFFERS_QUEUED, &state); NSLog(@"queued number:%d ...
- Android开发之通过包管理器获取安装应用信息
最近在自己写一个APP,有一个模块需要获取手机应用的一些信息.坑还是有,但都基本踩过了,自己把他实现了出来,实现方法还是很需要掌握的.底部弹出的对话框中四个选项的实现不多做说明,主要讲讲如何获取这些安 ...
- DropDownList绑定数据的几种方式
1. 视图中添加可以直接通过单击属性"Items"后的按钮为某一DropDownList控件添加数据项.每添加一项数据就是添加了一个ListItem(列表控件中的数据项).这种方式 ...
- R学习笔记-安装R和RStudio,注意RStudio的版本需要与操作系统版本匹配
1.安装步骤:先安装R,再安装RStudio RStudio是R的集成开发工具,本身不带R环境. 2.从当前R的官网和RStudio下载的R和RStudio的版本分别为: A .For Windows ...