android 不同進程間的調用 AIDL 實現通訊服務

來源:互聯網
上載者:User

android 不同進程間的調用 AIDL 實現通訊服務
android 不同進程間的調用 AIDL 實現通訊服務
最近對aidl android 不同進程間的調用,不同運用間的調用做了一些嘗試:步驟如下:1:首先在要被調用的程式裡寫好服務service

具體代碼如下:

package com.jiaruihua.service.demo;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class AlipayService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("遠程服務已綁定");//注意此處要返回我們的IBinderreturn new MyBinder();}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("遠程服務已解除");return super.onUnbind(intent);}@Overridepublic void onCreate() {// TODO Auto-generated method stubSystem.out.println("遠程服務已建立");super.onCreate();}@Overridepublic void onDestroy() {// TODO Auto-generated method stubSystem.out.println("遠程服務已銷毀");super.onDestroy();}/*
*此處是遠程所要調用的方法,功能處理在此處 * 支付操作 */public void payMoney(){System.out.println("支付操作");}/*
*此處需要一個Iservice.Stub,這是我們定義的Iservice.aidl,所實現的,見第二步 * Iservice.Stub 已經實現Binder  */public class MyBinder extends Iservice.Stub{@Overridepublic void callMethodService() {payMoney();}}}

2:建立上一步中需要一個Iservice.aidl檔案


代碼如下:
package com.jiaruihua.service.demo;//aidl 介面定義不需要存取修飾詞 預設公用interface Iservice {void callMethodService();}

eclipse中的gen目錄中會自動建立 Iservice.java檔案
3:在mainfest.xml檔案中註冊Iservice
4:在另外一個需要調用的程式中建立一個包,注意此處的包名要和 上面mainfest.xml中service的指定包名一致;讓後將上面第二步建立的Iservice.aidl檔案拷貝過來


5:調用遠程服務
package com.example.mygameapp;import com.jiaruihua.service.demo.Iservice;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;public class MainActivity extends Activity {private Intent intent;private Iservice iservice;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);intent = new Intent();// 此處的action 必須和你在調用的程式裡設定的action 一至intent.setAction("com.jiaruihua.ServicePay");// 綁定服務findViewById(R.id.banding).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 綁定服務 開啟服務bindService(intent, new MyConn(), BIND_AUTO_CREATE);}});// 調用遠程方法findViewById(R.id.callmethod).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubtry {iservice.callMethodService();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private class MyConn implements ServiceConnection {// 成功綁定@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// 將sercicse 轉換成Iservice介面類型iservice = Iservice.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}}}


源碼demo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.