美文网首页
在Android Studio中使用AIDL

在Android Studio中使用AIDL

作者: 留给时光吧 | 来源:发表于2018-04-09 21:20 被阅读0次

1. 首先创建aidl文件夹,位于main目录下,和Java和res同级,如下:


2. 在aidl目录中创建需要的aidl文件,通过右键new--AIDL--AIDL file可以很方便的创建:
package com.app.cheny.aidl;

interface IMyAidlInterface {
    String fun();
}

3. 然后手动编译一下,Build -- Make Module ...


若成功的话会在build目录下生成这样一个文件:

4. 最后正常写服务端和客户端代码即可,如下

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return new IMyService();
    }

    public class IMyService extends IMyAidlInterface.Stub {
        @Override
        public String fun() throws RemoteException {
            return "Hello world";
        }
    }
}
public class MainActivity extends AppCompatActivity {
    private IMyAidlInterface mService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(getApplicationContext(),MyService.class);
        bindService(intent,connection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    }

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

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService = null;
        }
    };

    public void get(View view) {
        try {
            ((Button)view).setText(mService.fun());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

另外如果AIDL中涉及需要序列化的对象,需要这样操作,若序列化类如下:

public class Item implements Parcelable {
    public String tag;

    Item(String tag){
        this.tag = tag;
    }

    protected Item(Parcel in) {
        tag = in.readString();
    }

    public static final Creator<Item> CREATOR = new Creator<Item>() {
        @Override
        public Item createFromParcel(Parcel in) {
            return new Item(in);
        }

        @Override
        public Item[] newArray(int size) {
            return new Item[size];
        }
    };

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(tag);
    }
}

对应的aidl文件如下,其中parcelable是小写的:

package com.app.cheny.aidl;

parcelable Item ;

修改IMyAidlInterface文件如下,注意import内容:

package com.app.cheny.aidl;

import com.app.cheny.aidl.Item;

interface IMyAidlInterface {
    Item fun();
}

剩下的就在对应Java文件中修改即可。

相关文章

  • Android AIDL

    通过此文记录以下自己在使用AIDL时的一些理解。在Android Studio中首先定义.aidl文件: 紧接着M...

  • AIDL

    Android中AIDL的基本用法Android 中AIDL的使用与理解Android AIDL使用详解彻底明白A...

  • Android中的AIDL

    Android中的AIDL使用详解 AIDL使用解析 Android进阶之AIDL的使用详解

  • Android-AIDL使用

    AIDL使用,多进程内的多线程情况 1、在src的main目录下创建AIDL文件夹,Android studio ...

  • Android studio中AIDL的创建

    在android studio中创建aidl,直接在module上单击右键,选择新建AIDL,则会module的目...

  • Android AIDL与proxy,stub

    1.简单使用 利用android studio开发aidl还是非常方便的,建立一个aidl的后缀文件,在servi...

  • Android Studio中AIDL简单使用

    绑定方式开启服务基本流程原理 Android Studio中AIDL使用方法 上文链接要注意的三点:

  • 使用Lint 和 Annotations来提升代码质量

    使用 Lint 来检查代码 在 Android Studio 中使用 lint 在Android Studio中,...

  • kotlin aidl 找不到实体类

    Book.aidl 找不到book类? Android Studio 是默认使用 Gradle 来构建 Andro...

  • 在Android Studio中使用AIDL

    1. 首先创建aidl文件夹,位于main目录下,和Java和res同级,如下: 3. 然后手动编译一下,Buil...

网友评论

      本文标题:在Android Studio中使用AIDL

      本文链接:https://www.haomeiwen.com/subject/oilwhftx.html