RPC的简单实例

摘要:
interfaceIPerson{voisetName(Stringname);}}RpcService.javapackagecom.hoprun.activity;importcomhoperun.aidl.IPerson.Stub;}}RPC服务活动.javapackagecom.hoprun.activity;importandroid.app.活动;

先新建一个aidl文件

IPerson.aidl

package comhoperun.aidl;
interface IPerson{
void setName(String name);
void setAge(int age);
String display();

}

再新建对应的java文件

IPersonImpl.java

package com.hoprun.activity;

import android.os.IBinder;
import android.os.RemoteException;

import comhoperun.aidl.IPerson;

public class IPersonImpl extends IPerson.Stub {

String name;
int age;
@Override
public IBinder asBinder() {

return null;
}

@Override
public void setName(String name) throws RemoteException {
this.name = name;

}

@Override
public void setAge(int age) throws RemoteException {

this.age = age;
}

@Override
public String display() throws RemoteException {
// TODO Auto-generated method stub
return "name : " + name + " age : " + age;
}

}

RpcService.java

package com.hoprun.activity;
import comhoperun.aidl.IPerson.Stub;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class RpcService extends Service {

//把实现类赋值给Stup,接口的静态内部类
Stub person = new IPersonImpl();
@Override
public IBinder onBind(Intent intent) {
//RPC:远程进程访问,在IPerson类中有定义
return person;
}

}

RPCServiceActivity.java

package com.hoprun.activity;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import comhoperun.aidl.IPerson;

public class RPCServiceActivity extends Activity {
/** Called when the activity is first created. */
public static final String SERVICE_STR = "com.hoperun.service";
Button button_service;
IPerson iperson;
//绑定service时,调用的ServiceConnection
ServiceConnection conn = new ServiceConnection(){

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//获得接口IPerson
iperson = IPerson.Stub.asInterface(service);
if(iperson != null){
try {
//RPC方法调用
iperson.setName("zhangsan");
iperson.setAge(23);
String msg = iperson.display();
Toast.makeText(RPCServiceActivity.this, msg, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

}

};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//定义按钮
button_service = (Button) findViewById(R.id.button_service);
button_service.setText("aidl绑定Service");
//绑定监听器
button_service.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(SERVICE_STR);
//绑定service
bindService(intent, conn, Service.BIND_AUTO_CREATE);
}
});
}
}

免责声明:文章转载自《RPC的简单实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python sqlite中通过字段名获取查询结果C/S框架WebService架构用户凭证(令牌)解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java学习笔记(三)——静态导入,package-info,Fall-through

【前面的话】       算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年,我会不努力?哈哈。       这篇文章是自己在学习的过程中总会发现一些小的知识点,然后我就记录在这了,基础文章,选择阅读。 【知识汇总】 一、...

Spring源码分析:类型转换(一)之PropertyEditor和ConversionService

引子 创建Person类: @Data @Component public class Person { @Value("wj") private String name; @Value("20") private Integer age; @Value("2020/10/10 12:30:30") private Date birth;...

Object-C与Swift混合开发

Object-C作为Apple的iOS App开发语言服务了很多个年头,2014年Apple推出了新的编程语言Swift。更高效更安全的口号再次吸引了一大批非iOS开发程序猿进入,小编觉得Swift代替Object-C仅仅是时间问题,在神州这片土地上,毕竟技术普及有些落后。但再有两年左右时间Swift产品链将形成。第三方支持框架逐步完好。Swift必将成...

QOS-CBQ概述

 QOS-CBQ概述    2018年7月7日    19:56 CBQ(基于类的对列)是一种基于QOS policy实现的拥塞管理技术。 CBQ中包含一个LLQ(低延迟队列),用来支撑EF(快速转发)类业务被绝对优先发送,保证延迟。 CBQ中最大包含64个BQ(带宽保证队列),用来支撑AF(确保转发)类业务,保证每一个队列的带宽及可控的延迟。 CBQ...

开机启动项

开启与关闭 [root@c ~]# systemctl status chronyd.service● chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)Ac...

PyQt5中文手册

PyQt5-Chinese-tutorial PyQt5中文教程,翻译自 zetcode,项目地址:https://github.com/maicss/PyQt5-Chinese-tutoral 这个教程比较好的地方是,能讲解每一段代码的含义。 虽然PyQt的函数命名已经非常语义化了,但是对于新手来说,有这一步还是更好的。 所以我选择了翻译这篇教程,希望能...