AIDL的简单使用
1 AIDL(Android Interface Definition Language):接口定义语言。 
  2 当需要在不同的进程之间传递对象时,比如在不同的应用之间传递对象的时候,就需要使用AIDL。 
  3 AID使得一个应用能够调用另一个应用的服务。
一、 服务端应用(其实就一个提供服务的应用)
1 创建AIDL文件
这里用的开发工具是Android Studio,在main文件夹下创建aidl文件夹,和java文件夹同级,在aidl文件夹中创建包,包名与应用包名必须一致,最后创建aidl文件:PeopleServiceAIDL.aidl
package com.miquan.demo;
// AIDL其实就是一个接口,定义了通讯的规则。
interface PeopleServiceAIDL {
    String findPeople(int num);
}
此时点击Android Studio菜单中的Build > Make Module xxx,然后就会生成一个对应的类了。具体位置:build > generated > source > aidl > debug > xxx
2 创建Service
PeopleService.java
package com.miquan.demo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class PeopleService extends Service {
    private IBinder mBinder = new PeopleServiceBinder();
    public PeopleService() {
    }
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
    private final class PeopleServiceBinder extends PeopleServiceAIDL.Stub {
        @Override
        public String findPeople(int num) throws RemoteException {
            return num == 0 ? "王尼玛" : "唐马儒";
        }
    }
}
在清单文件中配置Service(用隐式启动):
<service android:name=".PeopleService">
    <intent-filter>
        <action android:name="com.miquan.demo.people.service"/>
    </intent-filter>
</service>
至此服务端完成了。
二、 客户端(调用端)
首先要以同样的方法创建aidl文件,或者复制过来,要对应的。
package com.miquan.as3;
import android.app.Activity;
import android.content.ComponentName;
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.Button;
import com.miquan.demo.PeopleServiceAIDL;
public class MainActivity extends Activity {
    private Button mButton;
    private PeopleServiceAIDL mPeopleServiceAIDL;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // 这里得到的name就是从另外一个应用中的服务得到的
                    String name = mPeopleServiceAIDL.findPeople(0);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
        bindService(new Intent("com.miquan.demo.people.service"), mServiceConnection, BIND_AUTO_CREATE);
    }
    private ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mPeopleServiceAIDL = PeopleServiceAIDL.Stub.asInterface(service);
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mPeopleServiceAIDL = null;
        }
    };
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(mServiceConnection);
    }
}