九 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);}

声明进程

<serviceandroid: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(){

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

        }

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

@Nullable    @Overridepublic 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() {        @Overridepublic void onServiceConnected(ComponentName name, IBinder service) {            mIMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);}

        @Overridepublic void onServiceDisconnected(ComponentName name) {

        }    };

    private IMyAidlInterface mIMyAidlInterface;

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_aidl);

findViewById(R.id.button_aidl).setOnClickListener(new View.OnClickListener() {            @Overridepublic 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;}

    @Overridepublic int describeContents() {return 0;}

    @Overridepublic 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];}    };}
时间: 2024-12-28 08:47:08

九 AIDL的相关文章

金九银十跳槽季余温过后,记录以往走过的面试经历

前言 金九银十跳槽季不知不觉已经过去一月有余,在这一个月里面,刷了不少题,面了很多公司,把过往的经历整理出来,为大家提供一些经验,以防踩坑 对此很多面试中遇到的问题,花了15个小时整理成为了一份983页的PDF文档. 一.面试前的准备 工欲善其事,必先利其器:想要使他的工作做好,一定要先让工具锋利.要做好一件事,准备工作非常重要. 准备主要还是三个方面: 第一个,简历:第二个,刷题(包括Java.kotlin.android和算法):第三个,HR的面试通关准备.我下面一步一步的来讲. 1.1简历

【翻译】Android Interface Definition Language (AIDL)

参考地址:https://developer.android.com/guide/components/aidl.html Android Interface Definition Language (AIDL) AIDL (Android Interface Definition Language) is similar to other IDLs you might have worked with. It allows you to define the programming inter

九个Console命令,让 JS 调试更简单

一.显示信息的命令 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>常用console命令</title> 5 <meta http-equiv="Content-Type"content="text/html; charset=utf-8" /> 6 </head> 7 <body> 8 <script type=&quo

九数组分数

1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码. #include <stdio.h> void test(int x[]) { int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; if(a*3==b) printf("%d / %d\n"

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇: 今天是来到无限互联的第四天,严格来说已经第六天了,刚来就是开班典礼,给人一种很好的氛围.老师讲了很多关于以后学习的技巧和规定,我的第一感觉是,比备战高考还要严格,不过这才能体现一个组织的负责任.正式开讲才感觉到这个班级的大神无处不在,不努力根本赶不上,就是这个学习氛围和高强度的练习很重要.多用心你才能感觉到有些事其实很简单.关于学习时间大家基本都是一天不动的在敲代码,等于给自己一个机会吧.时间飞逝,抓住机会才重要.刚来第一周,感受最深就是好

android 远程Service以及AIDL的跨进程通信

在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv

QT开发(九)——QT单元组件

QT开发(九)--QT单元组件 QT有三种单元组件,分别为列表单元组件QListWidget.树形单元组件QTreeWidget.表格单元组件QTableWidget. 一.QListWidget列表单元 1.QListWidget组件简介 QListWidget列表单元组件继承自QListView,是基于单元的列表组件.QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作.可以通过QListWi

麦子学院干货 | iOS开发者需要的九大设计工具

麦子学院[www.maiziedu.com]干货 | iOS开发者需要的九大设计工具 1.AppCooker AppCooker是一款方便的iPad应用.它能够提供可点击的原型模板,集合了所有需要编码或渲染的重要部件,并且还可以帮助开发者无需任何代码编写就能够构思.设计和测试iOS应用.目前AppCooker在App Store上的售价为19.99美元. 主要功能: 全功能模型编辑器拥有所有iOS UI部件 位图图画.矢量形状和文本工具 带有链接的整体屏幕视图 收存箱和Box支持云服务 2.Sk

JSP(Java Server Page)九大内置对象

× Web程序的请求相应模式(请求[request].响应[response]) × form method="get"和method="post"提交方式的区别                  1.get:以明文形式通过url进行参数的传递,数据能在url获取,提交的数据最多不超过2KB,安全性低但效率比post高.                 适用于提交数据量不大,安全性不高的数据.eg:搜索.查询等               2.post:将用户提交的