package com.example.android_server.aidlService;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import com.example.android_server.aidlService.IStudent.Stub;public class MyAIDLService extends Service { StudentBinder binder=null; @Override public void onCreate() { super.onCreate(); binder=new StudentBinder(); } @Override public IBinder onBind(Intent intent) { return binder; } /** * 自定义一个Binder,继承存根类 * * @author Administrator * */ public class StudentBinder extends Stub { @Override public int getCount() throws RemoteException { return 1; } }}
IStudent.aidl
package com.example.android_server.aidlService;interface IStudent{int getCount();}
在manifest中注册服务:
另一个项目中的调用该Service
package com.example.android_serviceclient;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.RemoteException;import android.widget.TextView;import android.widget.Toast;import com.example.android_server.aidlService.IStudent;import com.example.android_server.aidlService.IStudent.Stub;public class MainActivity extends Activity implements Handler.Callback { private IStudent iStudent; private TextView textView=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=(TextView) findViewById(R.id.text); Intent intent = new Intent(); intent.setAction("com.example.aidlservice"); startService(intent); bindService(intent, connection, BIND_AUTO_CREATE); Handler handler = new Handler(this); handler.sendEmptyMessageDelayed(1, 2000); } private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("onServiceConnected"); iStudent=Stub.asInterface(service); } }; @Override public boolean handleMessage(Message msg) { try { textView.setText(iStudent.getCount() +""); Toast.makeText(MainActivity.this, "得到的值:"+iStudent.getCount() + "", 200) .show(); } catch (RemoteException e) { e.printStackTrace(); } return false; }}
aidl是Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口.