AIDL
来源:互联网 发布:sql注入漏洞如何修复 编辑:程序博客网 时间:2024/05/16 01:35
android借助AIDL实现跨进程调用例子
1.新建一个项目android AidlServer
项目的包名为:com.example.aidlserver
2.在项目中新建一个AIDL文件 取名叫IRemoteService.aidl
package com.example.aidlserver;//定义服务的功能interface IRemoteService {int getPid();String getName();}
3.保存文件build下项目 或是使用aidl命令生成 IRemoteService.java
如果是在eclipse下自动build会在 gen目录下生成。
4.新建一个service
package com.example.aidlserver;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import com.example.aidlserver.IRemoteService;public class RemoteService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn new MyRemote();}class MyRemote extends IRemoteService.Stub{@Overridepublic int getPid() throws RemoteException {// TODO Auto-generated method stubreturn 2;}@Overridepublic String getName() throws RemoteException {// TODO Auto-generated method stubreturn "hello name";}} }
5.修改AndroidManifest.xml 添加 RemoteService声明
<service android:name=".RemoteService"> <intent-filter > <action android:name="com.example.aidlserver.RemoteService" /> </intent-filter> </service>
在这里我们设置一个Itent-filter 是为了可以使service被隐式调用
到这里service就完成了
6.新建客户端项目AidlClient
7.在AidlClient醒目中新建包名 com.example.aidlserver
8.将第2步中建的AIDL copy到次包名下。
9.Build AidlClient项目
10.新建布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/mainthread" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <TextView android:id="@+id/servicethread" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/bind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bind" /> <Button android:id="@+id/unbind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="86dp" android:text="unbind" /> <Button android:id="@+id/getname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="getname" /></LinearLayout>
11.编辑Activity
package com.example.aidlclient;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.os.RemoteException;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;import com.example.aidlserver.IRemoteService;public class MainActivity extends Activity implements OnClickListener {IRemoteService services;ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubservices=null;Log.v("unbind","unbind");}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubservices=(IRemoteService)IRemoteService.Stub.asInterface(service);try {String names = services.getName();nametxt.setText(names);servicethread.setText(Thread.currentThread().getName()+","+Thread.currentThread().getId());} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};View bind,unbind;TextView nametxt,mainthread,servicethread;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nametxt=(TextView) findViewById(R.id.name);mainthread=(TextView) findViewById(R.id.mainthread);servicethread=(TextView) findViewById(R.id.servicethread);bind = findViewById(R.id.bind);unbind=findViewById(R.id.unbind);mainthread.setText(Thread.currentThread().getName()+","+Thread.currentThread().getId());bind.setOnClickListener(this);unbind.setOnClickListener(this);Log.v("threadId","threadId="+Thread.currentThread().getId());}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.bind:Intent i = new Intent("com.example.aidlserver.RemoteService");bindService(i, conn , BIND_AUTO_CREATE);break;case R.id.unbind:unbindService(conn);break;default:break;}}}
- AIDL
- aidl
- AIDL
- AIDL
- AIDL
- AIDL
- AIDL
- aidl
- aidl
- AIDL
- AIDL
- aidl
- AIDL
- AIDL
- AIDL
- aidl
- aidl
- AIDL
- curl 发送HTTP请求 常用用法
- wait以及waitpid用法详解
- iOS中boolean、Boolean、BOOL、bool的区别
- 讲故事来学习设计模式(翻译)
- eclipse 中忽略jsp, xml文件中的报错信息
- AIDL
- office 2010每次打开word都要重新配置的解决方法
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- configure文件的生成
- Ubuntu 10.04安装Java6 JDK
- UITableView是否滚动到底部
- 异常try-catch-finally
- iOS 录音Wav 音频 转换 Amr ,Android 播放
- CCRepeatForever 重复动作