调用远程service aidl接口定义
Android studio 查看aidl定义的文件:当你进入你的AIDL文件并编写好了之后,点击AS上方菜单栏中的Build->Make Project,之后便可以在当前工程的app/build/generated/source/aidl/debug中找到系统为我们生成的.java文件了。
Service端
<service android:name="com.atguigu.l07_service.remote.MyRemoteService">
<intent-filter>
<action android:name="com.atguigu.l07_service.remote.MyRemoteService.Action"/>
</intent-filter>
</service>
public class MyRemoteService extends Service {
@Override
public IBinder onBind(Intent intent) {
Log.e("TAG", "onBind()");
return new StudentService();
}
@Override
public boolean onUnbind(Intent intent) {
Log.e("TAG", "onUnbind()");
return super.onUnbind(intent);
}
//处理Student相关的业务逻辑类
class StudentService extends IStudentService.Stub {
@Override
public Student getStudentById(int id) throws RemoteException {
Log.e("TAG", "Service getStudentById() "+id);
return new Student(id, "Tom", 10000);
}
}
}
《------------------------------start定义aidl接口--------------------------------------------》
定义自定义类型Student
//必须实现Parcelable接口
public class Student implements Parcelable {
private int id;
private String name;
get set。。。。
public int describeContents() { return 0;}
//将当前对象的属性数据写到Parcel包对象中(也就是打包) 打包解包在服务器端或client端都有可能,根据功能需求分类,如果服务器传出数据,则打包就在服务器端完成,如果客户端传输数据,则打包就在客户端完成
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeString(this.name);
}
// 添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel source) {
return new Student(source.readInt(), source.readString());
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
创建文件:Student.aidl package com.atguigu.service.test.remote; parcelable Student;
创建文件:IStudentService.aidl
package com.atguigu.service.test.remote;
import com.atguigu.service.test.remote.Student;
interface IStudentService {
Student getStudentById(int id);
}
eclipse自动生成一个通信接口类package com.atguigu.service.test.remote;
public interface IStudentService extends android.os.IInterface{
.......
}
《------------------------------end定义aidl接口--------------------------------------------》
client

public class MainActivity extends Activity {
private EditText et_aidl_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_aidl_id = (EditText) findViewById(R.id.et_aidl_id);
}
private ServiceConnection conn;
private IStudentService studentService;
public void bindRemoteService(View v) {
Intent intent = new Intent(
"com.atguigu.l07_service.remote.MyRemoteService.Action");
if (conn == null) {
conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name,
IBinder service) {
Log.e("TAG", "onServiceConnected()");
studentService = IStudentService.Stub.asInterface(service);
}
};
bindService(intent, conn, Context.BIND_AUTO_CREATE);
Toast.makeText(this, "绑定Service", 0).show();
} else {
Toast.makeText(this, "已经绑定Service", 0).show();
}
}
public void invokeRemote(View v) throws RemoteException {
if(studentService!=null) {
int id = Integer.parseInt(et_aidl_id.getText().toString());
Student student = studentService.getStudentById(id);
Toast.makeText(this, student.toString(), 0).show();
}
}
public void unbindRemoteService(View v) {
if (conn != null) {
unbindService(conn);
conn = null;
studentService = null;
Toast.makeText(this, "解绑Service", 0).show();
} else {
Toast.makeText(this, "还未绑定Service", 0).show();
}
}
}
调用远程service aidl接口定义的更多相关文章
- android 中activity调用远程service中的方法之 aidl的使用
服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件 (对应本地调用中的接口文件 ...
- Android调用远程Service的参数和返回值都需要实现Parcelable接口
import android.os.Parcel;import android.os.Parcelable; public class Person implements Parcelable{ pr ...
- AIDL —— Android接口定义语言
AIDL:Android Interface Definition Language,即Android接口定义语言,是Android进程间通信比较常用的一种方式.翻译一下,就是为了让某个Service ...
- AIDL使用绑定启动远程Service出现Service Intent must be explicit: Intent
Intent intent = new Intent(); intent.setAction("remote.MyRemoteService.Action"); 使用AIDL调用远 ...
- Android Activity与远程Service的通信学习总结
当一个Service在androidManifest中被声明为 process=":remote", 或者是还有一个应用程序中的Service时,即为远程Service, 远程的意 ...
- Android开发,Eclipse创建aidl接口时,出错
Android开发中,当我们需要调用远程Service时,我们一般通过远程接口(RMI)来实现的,而Android的RMI需要AIDL(Android Interface Definition Lan ...
- 大仙说道之Android studio实现Service AIDL
今天要开发过程中要用到AIDL的调用,之前用的eclipse有大量教程,用起来很方便,现在刚换了Android studio,不可否认studio真的很强大,只是很多功能还需要摸索. AIDL(And ...
- Android Studio实现Service AIDL
Android Studio实现Service AIDL [日期:2015-01-02] 来源:Linux社区 作者:teenyboy [字体:大 中 小] 今天要开发过程中要用到AID ...
- 一个简单的demo学习Android远程Service(AIDL的使用)
这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里.这进程间的通信是使用了An ...
随机推荐
- 模块化开发(seajs)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#知识点总结:Monitor和Lock以及区别
Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...
- 牛客网 Wannafly挑战赛9 A.找一找-数据处理
好几天没好好学习了(咸鱼晒干了) 把稍微没那么咸鱼的几天前的一场牛客网的比赛稍微看了一下,菜的要死,这一场大数的比较多,都死了. A.找一找 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 咦?Oracle归档文件存哪了?
实验环境:RHEL 5.4 + Oracle 11.2.0.3 现象:日志切换后没找到归档日志目录. 1.查看归档日志路径 2.日志切换后并未找到归档目录 3.创建归档目录后再次观察 引申知识 1.查 ...
- 在路上:安全公司“跨界”SD-WAN
编者按:本文是SDNLAB“企业+”特别报道之一.“企业+”是SDNLAB重点打造的栏目,汇聚信息行业运营商.设备商.互联网公司.软件公司.集成公司.融创投资公司.科研院所等企业,重新定义IT行业撮合 ...
- Java 浅析,生成OFD文件
摘要:这几天遇到个需要,需要提供用户下载电子证照,最简单的方法实现:word做了一份模板,利用网页工具转成OFD文件,http://www.yozodcs.com/page/example.html用 ...
- Leetcode总结之Union Find
package UnionFind; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; p ...
- Java创建和解析Json数据方法(三)——json-lib包的使用
(三)json-lib包的使用 这篇笔记主要介绍json-lib包的创建和解析json数据的方式,主要是的JSONObject.JSONArray和Java对象:beans, maps ...
- eclipse主题下载网站
http://eclipsecolorthemes.org/
- filter和spring 的interceptor都是单例的,都不是线程安全的
Filter 是在 Servlet 容器启动时就初始化的,因此可以认为是以单例对象存在的,如果一个请求线程对其中的成员变量修改的话,会影响到其他的请求线程,因此认为是多线程不安全的.