国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service

2020-04-11 11:20:23
字體:
供稿:網(wǎng)友

一、問題描述

  Android應(yīng)用程序的四大組件中Activity、BroadcastReceiver、ContentProvider、Service都可以進(jìn)行跨進(jìn)程。在上一篇我們通過ContentProvider實(shí)現(xiàn)了不同應(yīng)用之間的跨進(jìn)程調(diào)用,但ContentProvider主要是提供數(shù)據(jù)的共享(如sqlite數(shù)據(jù)庫(kù)),那么我們希望跨進(jìn)程調(diào)用服務(wù)(Service)呢?Android系統(tǒng)采用了遠(yuǎn)程過程調(diào)用(RPC)方式來實(shí)現(xiàn)。與很多其他的基于RPC的解決方案一樣,Android使用一種接口定義語(yǔ)言(Interface Definition Language,IDL)來公開服務(wù)的接口。對(duì)于Service的跨進(jìn)程調(diào)用需要通過AIDL來實(shí)現(xiàn),AIDL服務(wù)應(yīng)用非常廣泛,如百度地圖API中,就提供跨進(jìn)程的服務(wù),下面我們就看看如何實(shí)現(xiàn)AIDL Service ,案例如圖:

二、實(shí)現(xiàn)AIDL服務(wù)的步驟

1.  編寫AIDL文件

2.  如果aidl文件的內(nèi)容是正確的,會(huì)自動(dòng)生成一個(gè)Java接口文件(*.java)。

3.  建立一個(gè)服務(wù)類(Service的子類)。

4.  實(shí)現(xiàn)由aidl文件生成的Java接口。

5.  在AndroidManifest.xml文件中配置AIDL服務(wù), 添加<action>標(biāo)簽的android:name,以便客戶端使用隱式Intent啟動(dòng)服務(wù)

6、客戶端

三、編寫AIDL文件

  Android接口定義語(yǔ)言――LocalService.aidl

package com.jereh.remote;interface LocalService{    String getLocal();}

IDE會(huì)自動(dòng)生成LocalService.java 文件 如圖所示:

四、Remote應(yīng)用實(shí)現(xiàn)

  1、編寫MyRemoteService

public class MyRemoteService extends Service {  @Override  public IBinder onBind(Intent arg0) {    // TODO Auto-generated method stub    return new MyRemoteServiceImpl();  }  private class MyRemoteServiceImpl extends LocalService.Stub{    @Override    public String getLocal() throws RemoteException {      // TODO Auto-generated method stub      return "煙臺(tái)杰瑞教育";    }  }}

2、AndroidManifest.xml配置

<service android:name="com.jereh.retmote.MyRemoteService"      android:process="remote"      >      <intent-filter>        <action android:name="com.jereh.remote_service"/>      </intent-filter> </service>

五、客戶端實(shí)現(xiàn)

  1、在客戶端應(yīng)用中添加LocalService.aidl

  注意包名要與文件的在服務(wù)端定義的包名相同。如圖所示:

 

同樣會(huì)自動(dòng)生成LocalService.java 代碼

  2、MainActivity代碼:

public class MainActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);  }  public void startService(View view){    Intent service=new Intent("com.jereh.remote_service");    super.bindService(service, conn, Context.BIND_AUTO_CREATE);  }  public void showInfo(View view){    try {      local=service.getLocal();      Log.d("jereh", local);      Toast.makeText(this, "您已進(jìn)入"+local,Toast.LENGTH_LONG).show();    } catch (RemoteException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }private  LocalService service;private  String local;private ServiceConnection conn=new ServiceConnection() {    @Override    public void onServiceDisconnected(ComponentName arg0) {    }    @Override    public void onServiceConnected(ComponentName name, IBinder binder) {      // TODO Auto-generated method stub      // 獲取遠(yuǎn)程Service的onBinder方法返回的對(duì)象代理        service=LocalService.Stub.asInterface(binder);    }  };  @Override  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main, menu);    return true;  }}

xml文件:

<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"  tools:context=".MainActivity" >  <Button    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="啟動(dòng)遠(yuǎn)程服務(wù)" android:onClick="startService" />   <Button    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="查看信息" android:onClick="showInfo" /></LinearLayout>

以上所述就是本文給大家介紹的Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service,希望大家喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仙游县| 巴青县| 绥化市| 阿克苏市| 松潘县| 天祝| 磴口县| 禹城市| 樟树市| 顺平县| 桑日县| 长沙市| 德令哈市| 兴安县| 云梦县| 长寿区| 廊坊市| 阜新市| 垦利县| 柯坪县| 平陆县| 瓦房店市| 时尚| 昌图县| 闽清县| 双桥区| 威远县| 临海市| 文水县| 蓝山县| 太保市| 武冈市| 波密县| 界首市| 江孜县| 犍为县| 遂昌县| 仪陇县| 巴彦淖尔市| 钟祥市| 苏州市|