【Android学习】Android服务之Service(4)--AIDLService

来源:互联网 发布:淘宝怎么上架产品 编辑:程序博客网 时间:2024/06/18 12:25

Android系统中,各应用程序都运行在自己的进程中,进程之间一般无法直接进行数据交换,为了实现这种跨进程通信(IPC),Android提供了AIDLService。

其跨进程调用Service过程:

--创建AIDL文件:


package com.ye_yun_lin.aidlservice;interface ICat{String getColor();double getWeight();}

将借口暴露给客户端:

package com.ye_yun_lin.aidlservice;import java.util.Timer;import java.util.TimerTask;import com.ye_yun_lin.aidlservice.ICat.Stub;import android.R.integer;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;public class AidlService extends Service{private CatBinder catBinder;Timer timer=new Timer();String[] colors=new String[]{"黑色","红色","黄色"};double[] weights=new double[]{2.2,2.6,3.5};private String color;private double weight;public class CatBinder extends Stub{@Overridepublic String getColor() throws RemoteException {return color;}@Overridepublic double getWeight() throws RemoteException {return weight;}}@Overridepublic IBinder onBind(Intent intent) {return catBinder;}@Overridepublic void onCreate() {super.onCreate();catBinder=new CatBinder();timer.schedule(new TimerTask() {@Overridepublic void run() {int rand=(int)(Math.random()*3);color=colors[rand];weight=weights[rand];System.out.println("---------"+rand);}}, 0, 800);}@Overridepublic void onDestroy() {super.onDestroy();}}

在AndroidManifest中配置该Service:

        <service android:name="com.ye_yun_lin.aidlservice.AidlService">            <intent-filter>                <action android:name="com.ye_yun_lin.aidlservice.AidlService.action.AIDL_SERVICE"/>            </intent-filter>        </service>

客户端访问AIDLService:

package com.ye_yun_lin.aidlservice;import android.R.color;import android.os.Bundle;import android.os.IBinder;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {private ICat catService;private Button button;private EditText edit1,edit2;private ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {catService=null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {catService=ICat.Stub.asInterface(service);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);edit1=(EditText)findViewById(R.id.edit1);edit2=(EditText)findViewById(R.id.edit2);Intent intent=new Intent();intent.setAction("com.ye_yun_lin.aidlservice.AidlService.action.AIDL_SERVICE");bindService(intent, conn, Service.BIND_AUTO_CREATE);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {edit1.setText(catService.getColor());edit2.setText(catService.getWeight()+"");} catch (Exception e) {// TODO: handle exception}}});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}}

结果:


0 0