android学习之AIDL初探
来源:互联网 发布:godaddy 域名续费 编辑:程序博客网 时间:2024/04/28 04:47
很久以前就应该写这篇文章了,但是之前一直有事情,今天终于有时间了,因为android不允许共享内存,所以出现了AIDL(全称是Android Interface Define Language)也就是进程间通信,其实进程间通信也不麻烦,这里说说大概的思路,首先在服务器端口,我们写一个aidl的文件,文件里面通过接口的形式来写,但是没有限定词,(不要担心,代码会在后面贴出),然后android系统会根据这个文件在gen目录生成对应的java文件,然后我们写一个service,这个service里面需要实现之前对应生成的java文件里面的stub类,然后我们通过service里面的onbind函数,返回实现了stub类的方法的对象,在我们的客户端我们通过ServiceConnection来获得我们返回的对象,我们可以通过这个对象来调用我们之前定义在aidl文件中的方法,这里还需要提醒一下,需要在服务器端申明service,毕竟四大组件是很厉害的,可以贴代码了:
工程目录
aidl
package com.jk.aidlservice;interface IMyService {String getValue(String s);}自动生成的代码就不贴了,上面的代码一旦保存以后就会生成IMyService
MyService
package com.jk.aidlservice;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;public class MyService extends Service {// 我们需要返回的类的类型public class MyServiceImpl extends IMyService.Stub {@Overridepublic String getValue(String s) throws RemoteException {return s + "欢迎来到季科的博客";}}@Overridepublic IBinder onBind(Intent intent) {// 返回我们需要返回的类的对象return new MyServiceImpl();}}服务器的主程序里面什么也没有就不写了
完成这步以后我们需要申明service
<service android:name="com.jk.aidlservice.MyService"> <intent-filter > <action android:name="com.jk.aidl.service.Myservice"/> </intent-filter> </service>
然后我们需要将服务器里面的Myservice和IMyService带同包名一起复制到客户端,这里也可以想到,因为我们需要共同的接口,
最后,我们需要写主程序
package com.example.aidlclient;import com.jk.aidlservice.IMyService;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {public Button btn_show;public IMyService myService;// 通过ServiceConnection来获得返回的IBinder对象public ServiceConnection myServiceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// 得到从客户端返回的对象myService = IMyService.Stub.asInterface(service);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 启动服务bindService(new Intent("com.jk.aidl.service.Myservice"),myServiceConnection, Context.BIND_AUTO_CREATE);// 获得按钮btn_show = (Button) findViewById(R.id.btn_show);// 添加按钮点击事件btn_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtry {// 调用myservice对象的函数Toast.makeText(MainActivity.this, myService.getValue("ni"),Toast.LENGTH_SHORT).show();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}}
这样就完成了程序间的通信
0 0
- android学习之AIDL初探
- AIDL初探以及学习
- android学习笔记之AIDL
- android学习笔记之AIDL
- Android学习--Service之AIDL
- Android Service学习之AIDL
- Android学习笔记之AIDL
- Android开发艺术探索之初探AIDL(一)
- Android Service学习之AIDL实例
- Android Service学习之AIDL实例
- android服务学习service之AIDL
- Android学习之AIDL进程间通讯
- AIDL初探
- android AIDL学习问题
- 学习android aidl
- android学习5:AIDL
- Android AIDL 初始学习
- Android AIDL学习
- myBatis + SpringMVC上传、下载文件
- Android——通过findViewById自动类型转换
- 文件读写
- 约瑟夫环问题
- AVPlayer中想关方法介绍
- android学习之AIDL初探
- wins安装Java
- Collections在java中的常见用法
- 第十二周 运算符重载之复数类练习
- 网络编程知识(12)--ISO/OSI七层模型和TCP/IP四层网络模型
- 打字练习
- iOS 多线程编程之NSThread
- [BZOJ2836]魔法树(链剖+dfs序)
- UniversalImageLoader源码解读04-内存缓存