国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android AIDL基本使用

這篇具有很好參考價值的文章主要介紹了Android AIDL基本使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

AIDL是Android多進程通訊方式一種。

如要使用 AIDL 創(chuàng)建綁定服務,請執(zhí)行以下步驟:

  1. 創(chuàng)建 .aidl 文件

    此文件定義帶有方法簽名的編程接口。

  2. 實現(xiàn)接口

    Android SDK 工具會基于您的?.aidl?文件,使用 Java 編程語言生成接口。此接口擁有一個名為?Stub?的內(nèi)部抽象類,用于擴展?Binder?類并實現(xiàn) AIDL 接口中的方法。您必須擴展?Stub?類并實現(xiàn)這些方法。

  3. 向客戶端公開接口

    實現(xiàn)?Service?并重寫?onBind(),從而返回?Stub?類的實現(xiàn)。

以下是?.aidl?文件示例

// IMyAidlInterface.aidl
package com.jason.aidlserver;

// Declare any non-default types here with import statements

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  getInfo() ;
}

服務端實現(xiàn)接口 :?

功能實現(xiàn),由客戶端發(fā)送數(shù)據(jù)過來,簡單保存一下aString。然后客戶端讀取時候返回。?

class AidlServerService :Service(){

    private var aS :String?  = "empty"

   private   val mBinder = object: IMyAidlInterface.Stub (){

        override fun basicTypes(
            anInt: Int,
            aLong: Long,
            aBoolean: Boolean,
            aFloat: Float,
            aDouble: Double,
            aString: String?
        ) {

            aS = aString

        }

        override fun getInfo(): String {

            return  " RemoteService保存數(shù)據(jù) => $aS"
        }
    }

    override fun onBind(intent: Intent?): IBinder {
         return mBinder
    }
}

然后我們在注冊清單 AndroidManifest給server加上權(quán)限。

<permission
    android:name="jason.aidl"
    android:protectionLevel="normal" />
<uses-permission android:name="jason.aidl" />
<service
    android:name=".AidlServerService"
    android:exported="true"
    android:permission="jason.aidl">
    <intent-filter>
        <action android:name="jason.aidl.action" />
    </intent-filter>
</service>

這樣server端服務已經(jīng)開發(fā)好了,只需要在Activity把這個服務啟動即可。?

客戶端集成接口:?

客戶端還必須擁有接口類的訪問權(quán)限,因此如果客戶端和服務在不同應用內(nèi),則客戶端應用的?src/?目錄內(nèi)必須包含?.aidl?文件(該文件會生成?android.os.Binder?接口,進而為客戶端提供 AIDL 方法的訪問權(quán)限)的副本。?

代碼示例:??

class MainActivity : AppCompatActivity() {

    private lateinit var tvMsg :TextView
    private var autoMex :Int = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tvMsg = findViewById(R.id.tv_msg)

        findViewById<Button>(R.id.btn_connect).setOnClickListener {
            val intent = Intent( "jason.aidl.action")
            intent.setClassName("com.jason.aidlserver","com.jason.aidlserver.AidlServerService")
            bindService(intent,connect, Context.BIND_AUTO_CREATE)
        }

        findViewById<Button>(R.id.btn_send).setOnClickListener {
            remoteService?.basicTypes(1,2L,true,1.5F,2.5,"haha ${autoMex ++}")
        }

        findViewById<Button>(R.id.btn_get).setOnClickListener {
           tvMsg.text =  remoteService?.info
        }
    }

    private var remoteService  :IMyAidlInterface ? = null

    private val connect = object : ServiceConnection {
        override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
            remoteService = IMyAidlInterface.Stub.asInterface(service)
            tvMsg.text = "onServiceConnected"
        }

        override fun onServiceDisconnected(name: ComponentName?) {
            remoteService= null
            tvMsg.text = "onServiceDisconnected"
        }
    }

    override fun onDestroy() {
        unbindService(connect)

        super.onDestroy()
    }
}

因為我們給server端記上了權(quán)限,那么客戶端需要把對應權(quán)限加上 。否者會權(quán)限錯誤無法連接到遠程服務。?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jason.aidlclient">

    <!--sdk 30后需要加上 -->
    <queries>
        <package android:name="com.jason.aidlserver"/>
    </queries>
    <!--加上服務權(quán)限 -->
    <uses-permission android:name="jason.aidl"/>

展示效果:?

android aidl,Android開發(fā),android

通過 IPC 傳遞對象

?可以通過 IPC 接口,將某個類從一個進程發(fā)送至另一個進程。不過,您必須確保 IPC 通道的另一端可使用該類的代碼,并且該類必須支持?Parcelable?接口。支持?Parcelable?接口很重要,因為 Android 系統(tǒng)能通過該接口將對象分解成可編組至各進程的原語。

如要創(chuàng)建支持?Parcelable?協(xié)議的類,您必須執(zhí)行以下操作:

  1. 讓您的類實現(xiàn)?Parcelable?接口。
  2. 實現(xiàn)?writeToParcel,它會獲取對象的當前狀態(tài)并將其寫入?Parcel。
  3. 為您的類添加?CREATOR?靜態(tài)字段,該字段是實現(xiàn)?Parcelable.Creator?接口的對象。
  4. 最后,創(chuàng)建聲明 Parcelable 類的?.aidl?文件。

    如果您使用的是自定義編譯進程,請勿在您的構(gòu)建中添加?.aidl?文件。此?.aidl?文件與 C 語言中的頭文件類似,并未經(jīng)過編譯。

AIDL 會在其生成的代碼中使用這些方法和字段,以對您的對象進行編組和解編。

AIDL官方文檔指南:?Android 接口定義語言 (AIDL) ?|? Android 開發(fā)者 ?|? Android Developershttps://developer.android.google.cn/guide/components/aidl?hl=zh-cn#Expose文章來源地址http://www.zghlxwxcb.cn/news/detail-703146.html

到了這里,關于Android AIDL基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [Android AIDL] --- AIDL原理簡析

    [Android AIDL] --- AIDL原理簡析

    上一篇文章已經(jīng)講述了如何在Android studio中搭建基于aidl的cs模型框架,只是用起來了,這次對aidl及cs端如何調(diào)用的原理進行簡單分析 AIDL 文件可以分為兩類。 一類是用來定義接口方法,聲明要暴露哪些接口給客戶端調(diào)用; 一類用來聲明實現(xiàn)了 Parcelable 接口的數(shù)據(jù)類型,以供其

    2024年02月10日
    瀏覽(24)
  • hal深入剖析之a(chǎn)idl實戰(zhàn)-android framework車機車載手機系統(tǒng)開發(fā)

    hal深入剖析之a(chǎn)idl實戰(zhàn)-android framework車機車載手機系統(tǒng)開發(fā)

    這個是hal工程根目錄 接下來要創(chuàng)建aidl的文件存放目錄 注意mkdir -p android/hardware/mytest其實就是包名目錄,即模塊包名就是android.hardware.mytest. 提示:這個如果為了項目的更加好的維護性建議到自己項目目標的vendor下面進行,目前只是為了演示方便,直接在system的hardware下面 創(chuàng)建

    2024年02月19日
    瀏覽(20)
  • 【Android】Binder(一)Binder的介紹和AIDL使用Binder的實例

    【Android】Binder(一)Binder的介紹和AIDL使用Binder的實例

    Android 中的 Binder 是一個進程間通信機制,它允許不同進程之間相互調(diào)用方法和傳遞數(shù)據(jù)。Binder 主要用于實現(xiàn)系統(tǒng)服務和應用程序之間的通信,以及實現(xiàn) IPC(Inter-Process Communication,進程間通信)。 Binder 的核心是 Binder 驅(qū)動程序,它負責管理不同進程之間的通信。每個進程都可

    2024年02月07日
    瀏覽(26)
  • [Android AIDL系列 1] 手動編譯aidl文件,生成Java、C++[android]、C++[ndk]、Rust接口

    AIDL文件在Android系統(tǒng)上應用廣泛,和底層的Binder機制緊密關聯(lián)。 在Android源碼或者Android Studio中通常是自動編譯aidl文件,生成對應語言的接口文件。 做應用層Java開發(fā),aidl和binder封裝的比較“干凈”,不用太多的涉及binder的調(diào)用細節(jié),也不用太關心aidl的編譯過程。 如果是做中

    2024年02月08日
    瀏覽(28)
  • Android:AIDL實戰(zhàn)詳解

    Android:AIDL實戰(zhàn)詳解

    AIDL:Android Interface Definition Language AIDL是為了實現(xiàn)進程間通信而設計的Android接口語言 Android進程間通信有多種方式,Binder機制是其中最常見的一種 AIDL的本質(zhì) 就是基于對Binder的運用從而實現(xiàn)進程間通信 這篇博文從實戰(zhàn)出發(fā),用一個盡可能精簡的Demo,實現(xiàn)兩個App (也是兩個進程:

    2024年02月08日
    瀏覽(16)
  • Android studio 無法創(chuàng)建AIDL文件

    Android studio 無法創(chuàng)建AIDL文件

    Android studio 創(chuàng)建AIDL文件的時候 提示是灰色的無法創(chuàng)建 處理方法在app下面的build.gradle中的buildFeatures 添加 aidl = true 這個是 kotlin的寫法,如果是使用的舊項目修改下格式就行

    2024年01月25日
    瀏覽(20)
  • android aidl進程間通信封裝通用實現(xiàn)

    接上一篇的分析,今天繼續(xù) aidl復雜流程封裝-CSDN博客 今天的任務就是將代碼梳理下放進來 1 項目gradle配置: ? ?需要將對應的代碼放到各自的目錄下,這里僅貼下關鍵內(nèi)容,細節(jié)可以下載代碼慢慢看 ? ? sourceSets { ? ? ? ? main { ? ? ? ? ? ? manifest.srcFile \\\'src/main/AndroidManife

    2024年02月22日
    瀏覽(20)
  • Android Binder——APP中AIDL實現(xiàn)(十九)

    ????????AIDL(Android Interface Definition Language)其實就是對 Binder 通信的一個封裝,方便在開發(fā)中對 Binder 通信的使用,這里我們就從頭開始來看一下 AIDL 通信的創(chuàng)建過程。 ????????通過 Android Studio 的 File -New - AIDL 的方式就會生成對應包名的 aidl 文件。即 aidl 文件要與應用

    2024年04月28日
    瀏覽(36)
  • 深入解析Android AIDL:實現(xiàn)跨進程通信的利器

    深入解析Android AIDL:實現(xiàn)跨進程通信的利器

    Android Interface Definition Language (AIDL) 是一種Android系統(tǒng)中的跨進程通信機制。AIDL允許一個應用程序的組件與另一個應用程序的組件通信,并在兩者之間傳輸數(shù)據(jù)。 AIDL的主要作用是幫助不同進程間共享數(shù)據(jù)和服務,讓他們能夠互相調(diào)用。例如,在開發(fā)一個多功能的音樂播放器時,

    2024年02月19日
    瀏覽(24)
  • android aidl進程間通信封裝通用實現(xiàn)-用法說明

    接上一篇:android aidl進程間通信封裝通用實現(xiàn)-CSDN博客 該aar包的使用還是比較方便的 一先看客戶端 1 初始化 2 發(fā)送事件: ?就是通過json的形式將參數(shù)包裹進來,另一端統(tǒng)一解析 ?唯一標志位:KEY_CLIENT_REQUEST_AUTHOR 是必須要加的,不然區(qū)分不出來是那個客戶端 二再看服務端

    2024年02月20日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包