AIDL实现进程间通信(整理)
2015-01-20 17:50
239 查看
这是我整理人家实例,写出来的。
在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成。主要是通过AIDL文件的描述信息,eclips开发工具会生成相应的java代码。在用的时候,我们去调用这个代码就可以了。
即然是进程间的通信,它就应该有两个app程序,其中一个访问另一个。下面分为服务端和客户端还写,知识点不是很详尽,只暂时留个影象。
AIDLServer端
编辑Book.aidl文件内容如下
编辑AidlServerService.java文件如下
整个服务端就完成了。
AIDLClient客户端
首先把Book.java Book.aidl IAidlServerService.aidl文件拷贝到客户端。然后再编辑AIDLClientActivity.java文件即可。
AIDLClientActivity.java文件内容如下
这样服务端与客户端都完成了,先运行服务端,然后运行客户端,点击按钮就可以出来相应结果。
在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成。主要是通过AIDL文件的描述信息,eclips开发工具会生成相应的java代码。在用的时候,我们去调用这个代码就可以了。
即然是进程间的通信,它就应该有两个app程序,其中一个访问另一个。下面分为服务端和客户端还写,知识点不是很详尽,只暂时留个影象。
AIDLServer端
编辑Book.aidl文件内容如下
parcelable Book;编辑Book.java文件内容如下
package com.jackchan.aidlserver; import android.os.Parcel; import android.os.Parcelable; public class Book implements Parcelable{ private String bookName; private int bookPrice; public Book(){ } public Book(Parcel parcel){ bookName = parcel.readString(); bookPrice = parcel.readInt(); } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookPrice() { return bookPrice; } public void setBookPrice(int bookPrice) { this.bookPrice = bookPrice; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeString(bookName); dest.writeInt(bookPrice); } public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>(){ @Override public Book createFromParcel(Parcel source) { // TODO Auto-generated method stub return new Book(source); } @Override public Book[] newArray(int size) { // TODO Auto-generated method stub return new Book[size]; } }; }编辑IAIDLServerService.aidl文件如下
package com.jackchan.aidlserver; import com.jackchan.aidlserver.Book; interface IAIDLServerService{ String sayHello(); Book getBook(); }这个文件编辑完成后,可以在gen目录下看到生成出来的相应的java文件.
编辑AidlServerService.java文件如下
package com.jackchan.aidlserver; import com.jackchan.aidlserver.IAIDLServerService.Stub; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; public class AidlServerService extends Service{ @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return mBinder; } private IAIDLServerService.Stub mBinder = new Stub(){ @Override public String sayHello() throws RemoteException { return "Hello"; } @Override public Book getBook() throws RemoteException { Book mBook = new Book(); mBook.setBookName("Android应用开发"); mBook.setBookPrice(50); return mBook; } }; }最后还要编辑AndroidManifest.xml文件内容,这个一定不能忘,也就是客户端会根据这个去连接服务端
<service android:name=".AidlServerService" android:process=":remote"> <intent-filter> <!-- <action android:name="com.jackchan.aidlserver.IAIDLServerService"></action> --> <action android:name="com.jackchan.aidlserver.aaaa"></action> </intent-filter> </service>action中的android:name中的内容可以自己定义一个,客户端连接的时候与之保持一致即可。
整个服务端就完成了。
AIDLClient客户端
首先把Book.java Book.aidl IAidlServerService.aidl文件拷贝到客户端。然后再编辑AIDLClientActivity.java文件即可。
AIDLClientActivity.java文件内容如下
package com.jackchan.aidlclient; import com.jackchan.aidlserver.IAIDLServerService; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class AIDLClientActivity extends Activity { private TextView mTextView; private Button mButton; private IAIDLServerService mIaidServerService = null; private ServiceConnection mConnection = new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub mIaidServerService = IAIDLServerService.Stub.asInterface(service); try{ String mText = "Say Hello:" + mIaidServerService.sayHello() + "\n"; mText += "书名:" + mIaidServerService.getBook().getBookName() + "\n"; mText += "价格:" + mIaidServerService.getBook().getBookPrice(); mTextView.setText(mText); } catch(RemoteException e){ e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub mIaidServerService = null; } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_aidlclient); mTextView = (TextView)findViewById(R.id.textview); mButton = (Button)findViewById(R.id.button); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent service = new Intent("com.jackchan.aidlserver.aaaa"); bindService(service, mConnection, BIND_AUTO_CREATE); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.aidlclient, menu); return true; } }
这样服务端与客户端都完成了,先运行服务端,然后运行客户端,点击按钮就可以出来相应结果。
相关文章推荐
- android 使用AIDL实现进程间通信
- Android Aidl实现进程间通信
- Android使用AIDL实现进程间通信
- 使用AIDL实现进程间通信
- Android--AIDL,一种实现进程间通信的方式
- android: 使用AIDL实现进程间通信(附示例源码下载)
- AIDL 实现 IPC(进程间通信)
- Android 使用 AIDL 实现进程间通信,使用基本类型作为输入和输出参数
- Android学习小Demo(23)Aidl实现进程间通信
- Android AIDL IPC实现进程间通信
- android 中使用aidl实现进程间通信
- AIDL实现进程间通信,应用于电话拦截
- Android使用AIDL实现进程间通信
- Android使用AIDL实现进程间通信
- android笔记 AIDL 实现进程间通信
- AIDL实现进程间通信
- Android实现进程间通信aidl的使用
- android中非aidl实现进程间通信(编写顺序的parcel写入与读出)
- android messenger 可以实现比aidl轻量化的进程间通信
- Android Studio使用AIDL 实现进程间通信实例