九 AIDL

来源:http://www.cnblogs.com/sunyz/archive/2016/05/01/5450629.html
-Advertisement-
Play Games

多進程 多線程 優點 安全 穩定 擴大記憶體空間 節約CPU時間 AIDL=Android Interface definition language 多進程 多線程 優點 安全 穩定 擴大記憶體空間 節約CPU時間 使用情況:做一個下載,不想讓你的下載拖垮你的應用;播放器;ADK; 目的 =Aidl接 ...


  進程 多線程
優點 安全 穩定 擴大記憶體空間 節約CPU時間
AIDL=Android Interface definition language   使用情況:做一個下載,不想讓你的下載拖垮你的應用;播放器;ADK;   ----------------------------------------------------------------------------------------- 目的 =Aidl介面+service+activity =提供介面+輸入信息+接收信息   aidl作用 =提供介面   聲明 =另開進程   Service作用 =調用 AidlInterface.Stub+引用介面輸入信息+返回(onBind,stub)   Activity作用 =綁定service+得到信息   步驟: 1、自動生成     (1)aidl文件夾   main-aidl    (2)自動創建AIDL       main-aidl-包-AIDL(右鍵創建)     (3)自動生成相關代碼    app-build-generated-source-aidl-debug-點運行             會得到Interface 2、加入介面 ---------------------------------------------------------------------------- 3、輸入信息  service (1)創建aidl包    java-大包-aidl包 (2)創建AIDLService          ①繼承       ②綁定       ③ 調用 Interface       ④調用介面,放入信息       ⑤聲明另開進程 -------------------------------------------------------------------------------- 4、接收信息 activity   得到信息       ----------------------------------------------------------------------------------------------------  
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);

String getName(String nickName);
}
聲明進程
<service
android:name=".aidl.AIDLService"
android:process="com.aidl.test.service"
android:enabled="true"
android:exported="true">
</service>
service
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;

import com.syz.lianxi.IMyAidlInterface;


public class AIDLService extends Service {

IMyAidlInterface.Stub mStub = new IMyAidlInterface.Stub(){

@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

}

@Override
public String getName(String nickName) throws RemoteException {
return nickName + "aidl_hahaha";
}
}
;


@Nullable
@Override
public IBinder onBind(Intent intent) {
return mStub;
}
}
activity
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.view.View;
import android.widget.Toast;

import com.syz.lianxi.IMyAidlInterface;
import com.syz.lianxi.R;


public class AIDLActivity extends Activity {

ServiceConnectionmServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mIMyAidlInterface =
IMyAidlInterface.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {

}
}
;

private IMyAidlInterface mIMyAidlInterface;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_aidl);

findViewById(R.id.button_aidl).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mIMyAidlInterface!=null){
try {
String name =
mIMyAidlInterface.getName("nick_know_maco");
Toast.makeText(AIDLActivity.this, name + "", Toast.LENGTH_LONG).show();
} catch (RemoteException e) {
e.printStackTrace()
;
}
}
}
})
;

bindService(new Intent(this, AIDLService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
}

}
------------------------------------------------------------------------------------------------------- 如何使用插件,自動生成介面?
import android.os.Parcel;
import android.os.Parcelable;


public class Person implements Parcelable {

String mName;
int mAge;
String mAvatarUrl;

public String getName() {
return mName;
}

public void setName(String name) {
mName = name;
}

public int getAge() {
return mAge;
}

public void setAge(int age) {
mAge = age;
}

public String getAvatarUrl() {
return mAvatarUrl;
}

public void setAvatarUrl(String avatarUrl) {
mAvatarUrl = avatarUrl;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.mName);
dest.writeInt(this.mAge);
dest.writeString(this.mAvatarUrl);
}

public Person() {
}

protected Person(Parcel in) {
this.mName = in.readString();
this.mAge = in.readInt();
this.mAvatarUrl = in.readString();
}

public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
public Person createFromParcel(Parcel source) {
return new Person(source);
}

public Person[] newArray(int size) {
return new Person[size];
}
};
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習要點: 1.線性漸變 2.徑向漸變 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 背景漸變功能,主要有兩種漸變方式:線性漸變和徑向(放射性)漸變。 一.線性漸變 CSS3 提供了 linear-gradient 屬性實現背景顏色的漸變功能。在以前,這種效果必須採用圖片才能實現的。首先 ...
  • 學習要點: 1.文本陰影 2.文本裁剪 3.文本描邊 4.文本填充 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 中文本效果,其中也包含一些之前講過的 CSS3 文本屬性。 一.文本陰影 CSS3 提供了 text-shadow 文本陰影效果,這個屬性在之前講過,只是沒有涉及瀏覽器支持情 ...
  • 代碼: 代理方法: ...
  • <merge /> 標簽在你嵌套 Layout 時取消了 UI 層級中冗餘的 ViewGroup 。比如,如果你有一個 Layout 是一個豎直方向的 LinearLayout,其中包含兩個連續的 View 可以在別的 Layout 中重用,那麼你會做一個 LinearLayout 來包含這兩個 V ...
  • eclipse自動退出 今天打開eclipse的時候出現自動退出,也就是打不開了 我上網查了一下,把工作區間改了一下就好了 修改預設工作區間的如下:(不是預設的話直接修改就好) eclipse\configuration\.settings目錄下,有一個“org.eclipse.ui.ide.pre ...
  • 在 oncreateView 裡面 進行頁面初始化 view view.findViewById this 改成 getActivity() ...
  • UITableViewCell圖片視差效果 效果 源碼 https://github.com/YouXianMing/Animations 細節 OffsetImageCell.m OffsetCellViewController.m ...
  • 1. 類型安全和類型推測 1> 類型安全 Swift 是一個 _類型安全(type safe)_ 的語言。類型安全的語言可以讓你清楚地知道代碼要處理的值的類型。如果你的代碼需要一個`String`,你絕對不可能不小心傳進去一個`Int`。 由於 Swift 是類型安全的,所以它會在編譯你的代碼時進行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...