安卓最簡單的aidl用兩個程式類比進程通訊

來源:互聯網
上載者:User

安卓最簡單的aidl用兩個程式類比進程通訊

最近要面試了 沒 時間玩了.看了下安卓icp ,說實話一直沒過aidl這東東 發現網上文章好多 下載的卻好少 .好吧自己玩了一個 留下做個備忘吧.

 

服務端輸入文字會儲存在sd卡 用戶端調用服務的service得到文字返回給用戶端

整理下步驟

1建立 aidl介面 檔案implaidl.aidl 記得尾碼 ,注意不要修飾符哦 我的如此的簡單 然後gen目錄自動身成了一個對應的包下的implaidl.java檔案 裡面有個抽象的靜態內部類Stub 實現了我們的介面繼承了binder 我們發現安卓跨進程常用Ibinder介面,這太深奧我不懂 但是發現onbindservice時候connectionservice也會返回一個ibinder介面,這是安卓內部密碼把

package com.yung.aidlclient;interface implaidl{ String getText();}

看一下工程目錄 很簡單明了

先做用戶端 包含implaidl.aidl的包是從服務端考過來就是了 所以用戶端只有一個類展示擷取服務端的資料

package com.yung.aidl;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.widget.TextView;import com.yung.aidlclient.implaidl;import com.yung.aidlservice.R;/** * 2015年4月11日 15:54:13 *  * @author yung 這是調用者 用戶端 */public class ShowServiceAct extends Activity {TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.mainact);tv = ((TextView) findViewById(R.id.textview1));}@Overrideprotected void onResume() {super.onResume();// 這個action 是服務端的service在manidest註冊定義的action 的namebindService(new Intent(com.yung.aidl), new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubimplaidl i = implaidl.Stub.asInterface(service);try {tv.setText(i.getText());} catch (RemoteException e) {e.printStackTrace();}}}, Context.BIND_AUTO_CREATE);}}

 

用戶端就一個展示服務端的資料 就可以了 OK

在看下服務端吧 服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端


服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端

package com.yung.aidlclient;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.Toast;/**服務端 提供一個輸入的介面 輸入的資料 儲存在檔案提供給用戶端 * @author yung * */public class Main_ShowServiceAct extends Activity implements OnClickListener {public EditText ed;public static String filePath = aidl.text;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.mainact);ed = (EditText) findViewById(R.id.editText1);}@Overridepublic void onClick(View v) {saveTextContent(ed.getText().toString() +   儲存時間:+ System.currentTimeMillis());}private void saveTextContent(String str) {File file = new File(getsdpath() + / + filePath);try {if (!file.exists())file.createNewFile();FileOutputStream out = new FileOutputStream(file);out.write(str.getBytes());out.flush();out.close();Toast.makeText(this, 文字儲存完畢, Toast.LENGTH_SHORT).show();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static String getsdpath() {return Environment.getExternalStorageDirectory().getAbsolutePath();}}

最終要的service出來的 這個service在服務端實現了處理 但是在終端調用

 

package com.yung.aidlclient;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;/** * 服務端的服務 提供給用戶端調用 *  * @author yung 2015年4月11日 16:18:23 */public class AcceptServiceSer extends Service {@Overridepublic IBinder onBind(Intent intent) {return new implaidl.Stub() {@Overridepublic String getText() throws RemoteException {return getTextContent();}};}//由於public String getTextContent() {File file = new File(Main_ShowServiceAct.getsdpath() + /+ Main_ShowServiceAct.filePath);FileInputStream read;try {read = new FileInputStream(file);byte[] bys = new byte[read.available()];read.read(bys);return new String(bys);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}

加上服務斷的資訊清單檔

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.