¡¡¡¡ËµÃ÷
¡¡¡¡ÍøÉϺ¹Å£³ä¶°µÄÎÄÕ¶¼ÊǽéÉÜAndroidÔ¶³Ì·þÎñµÄ£¬Ò»¸ö¸ö½«Binder»úÖÆ¡¢AIDL½²µÃÍ·Í·ÊǵÀ£¬È»¶øûÓм¸¸öÈËÄܹ»¸ø³öÇåÎúµÄ·¶Àý˵Ã÷ÈçºÎÓÃ×î¿ìµÄ·½·¨Ñ§»á±àдºÍµ÷ÓÃÒ»¸öAndroidÔ¶³Ì·þÎñ¡£ÈôÄã½ö½öÊÇÏëÈçºÎ±àд»òÕßµ÷ÓÃAndroidµÄÔ¶³Ì·þÎñ£¬¶øÀÁµÃÈ¥Àí½âBinder»úÖÆÊÇÈçºÎÔËÐеģ¬ÄÇô±¾ÆªÎÄÕÂÕýºÃÊʺÏÄã¡£±Ï¾¹ÏÖÔÚÈËÈ˶¼»á¿ª³µ£¬µ«Ã»Óм¸¸öÈËÃ÷°×·¢¶¯»úµ½µ×ÊÇÈçºÎÔË×÷µÄ¡£
¡¡¡¡Ô´´úÂë
¡¡¡¡´úÂë°üÔÚ´Ë£¬°üÀ¨Ò»¸ö·þÎñ¶ËºÍÒ»¸ö¿Í»§¶Ë£¬ÎÞÐèÏÂÔØ·Ö£º
¡¡¡¡http://download.csdn.net/detail/logicteamleader/9407694
¡¡¡¡Ô¤±¸ÖªÊ¶
¡¡¡¡¶ÁÕßÓ¦¸ÃÓлù±¾µÄjava֪ʶ£¬ºÍAndroid¼òµ¥appµÄ¿ª·¢¾Ñé¡£
¡¡¡¡»·¾³
¡¡¡¡´úÂëÔËÐл·¾³£º
¡¡¡¡1.ADT2014°æ±¾;
¡¡¡¡2.android:minSdkVersion=”8”;android:targetSdkVersion=”20”
¡¡¡¡3.workspaceÖÐÒѾÉú³ÉÁËappcompatv7£¬ËüµÄ°æ±¾ÊÇandroid-22;
¡¡¡¡Ô¶³Ì·þÎñ¿ª·¢½Ì³Ì
¡¡¡¡ÔÚ¿ªÊ¼¿ª·¢Ö®Ç°£¬ÏÈŪÇå³þ¼¸¸ö¸ÅÄ
¡¡¡¡1. IPC:½ø³Ì¼äͨÐÅ£¬ÄãÖ»ÐèÒªÖªµÀAndroidÊÇÒÀÀµÕâ¸ö¶«Î÷À´½øÐÐÔ¶³Ì·þÎñµ÷ÓõľͿÉÒÔÁË¡£
¡¡¡¡2. Binder»úÖÆ£ºAndroid·¢Ã÷µÄÒ»ÖÖIPC»úÖÆ£¬¾Ý˵·Ç³£·Ç³£µÄºÃ£¬Äã¾Íµ±ËüÊǸöºÚºÐ×Ó£¬Í¨¹ýÕâ¸öºÚºÐ×ӾͿÉÒÔ½øÐÐÔ¶³Ì·þÎñµ÷ÓÃÁË£¬¶øÇÒAndroidÖеĺܶà»úÖƶ¼ÊÇͨ¹ýËüʵÏֵġ£
¡¡¡¡3. AIDLÓïÑÔ£ºÒ»ÖÖרÃÅÓÃÀ´Ð´Ô¶³Ì½Ó¿ÚµÄÓïÑÔ£¬¿´ËüµÄÃû×Ö¾ÍÖªµÀÁË£¬Android Interface Definition
¡¡¡¡Language¡£AIDLÓïÑÔ¿ÉÒÔ±»androidÌṩµÄ±àÒëÆ÷±àÒëΪJavaÔ´´úÂ룬Õâ¸öJavaÔ´´úÂ뽫»á±»·þÎñµÄºÍ¿Í»§¶ËʹÓã¬ÓÃÀ´¼ò»¯Ô¶³Ì·þÎñ¿ª·¢Á÷³Ì¡£Èç¹ûÄãµ±³õÍæ¹ýCORBA£¬ÄǾ͸üÄÜÃ÷°×ʲôÊÇIDLÓïÑÔÁË
¡¡¡¡4. IInterface½Ó¿Ú¡¢IBinder½Ó¿Ú¡¢IBinderÀàµÈµÈ£º¶¼ÊÇÓÃÀ´ÊµÏÖBinder»úÖƵĽӿںÍÀ࣬ÔÚ±¾½Ì³ÌÖУ¬Äã¾Íµ±ËüÃÇÊÇBinderºÚºÐ×ÓµÄÒ»²¿·Ö£¬²»ÐèÒªÁ˽⡣
¡¡¡¡ÔÙ˵һµã£¬ÆäʵAndroidÌṩµÄApiDemosÖоÍÓÐÒ»¸öÔ¶³Ì·þÎñµÄ±ê×¼·¶Àý£¬µ«ÊÇÆäÒ»ÊÇËüûÓн«·þÎñ¶ËºÍ¿Í»§¶Ë·Ö¿ªÐ´£¬Æä¶þÊÇÀý×ÓÖвôÔÓÁËÌ«¶àÆäËûµÄ¹¦ÄÜ£¬Òò´ËÀí½âÆðÀ´½ÏΪÀ§ÄÑ¡£Õâ¸öÀý×ÓÊÇcom.example.android.apis.app.RemoteService£¬ÓÐÐËȤµÄ¿ÉÒÔÔÚ¿´Íê±¾ÎĺóÔÙÈ¥ÏêϸÑо¿¡£
¡¡¡¡µÚÒ»²½£¬´´½¨Ò»¸öÆÕͨAndroidÓ¦ÓÃ
¡¡¡¡Ó¦ÓÃÃûΪWxbRemoteService£¬Õâ¸öÓ¦ÓÿÉÒÔɾµôÆäActivityÀ࣬µ«ÊÇΪÁ˼òµ¥£¬ÎÒÃǾͱ£ÁôËùÓÐ×Ô¶¯´´½¨µÄ´úÂë¡£
¡¡¡¡µÚ¶þ²½£¬±àдAIDL
¡¡¡¡AIDLÓïÑÔµÄÓï·¨ºÍJavaÆäʵºÜÏñ£¬ÄãÉõÖÁ¿ÉÒÔÏȱàдһ¸öJava½Ó¿Ú£¬È»ºóɾµôpublic¡¢protected¡¢privateÕâЩȨÏÞÏÞ¶¨´Ê¼´¿É¡£Àý×ÓÈçÏÂIWxbService.aidl£º
- package com.dumaisoft.wxbremoteservice;
- interface IWxbService {
- void setName(String name);
- String getName();
- }
¡¡¡¡×¢Ò⼸µã£º
¡¡¡¡1.½Ó¿ÚÃûºÍaidlÎļþÃûÏàͬ¡£
¡¡¡¡2.½Ó¿ÚºÍ·½·¨Ç°²»ÓüӷÃÎÊȨÏÞÐÞÊηûpublic,private,protectedµÈ,Ò²²»ÄÜÓÃfinal,static¡£
¡¡¡¡3.AidlĬÈÏÖ§³ÖµÄÀàÐÍ°ü»°java»ù±¾ÀàÐÍ(int¡¢long¡¢booleanµÈ)ºÍ(String¡¢List¡¢Map¡¢ CharSequence)£¬Ê¹ÓÃÕâЩÀàÐÍʱ²»ÐèÒªimportÉùÃ÷¡£¶ÔÓÚListºÍMapÖеÄÔªËØÀàÐͱØÐëÊÇAidlÖ§³ÖµÄÀàÐÍ¡£Èç¹ûʹÓÃ×Ô¶¨ÒåÀàÐÍ×÷ Ϊ²ÎÊý»ò·µ»ØÖµ£¬×Ô¶¨ÒåÀàÐͱØÐëʵÏÖParcelable½Ó¿Ú¡£
¡¡¡¡4.×Ô¶¨ÒåÀàÐͺÍAIDLÉú³ÉµÄÆäËü½Ó¿ÚÀàÐÍÔÚaidlÃèÊöÎļþÖУ¬Ó¦¸ÃÏÔʽimport£¬¼´±ãÔÚ¸ÃÀàºÍ¶¨ÒåµÄ°üÔÚͬһ¸ö°üÖС£
¡¡¡¡5.ÔÚaidlÎļþÖÐËùÓзÇJava»ù±¾ÀàÐͲÎÊý±ØÐë¼ÓÉÏin¡¢out¡¢inout±ê¼Ç£¬ÒÔÖ¸Ã÷²ÎÊýÊÇÊäÈë²ÎÊý¡¢Êä³ö²ÎÊý»¹ÊÇÊäÈëÊä³ö²ÎÊý¡£
¡¡¡¡6.JavaÔʼÀàÐÍĬÈϵıê¼ÇΪin,²»ÄÜΪÆäËü±ê¼Ç
¡¡¡¡IWxbService.aidlÎļþµÄλÖÃÊÇÔÚcom.dumaisoft.wxbremoteservice°üÖУ¬Ö»ÒªÓï·¨ÕýÈ·£¬Ôò»áÔÚADTµÄgenĿ¼ÏµÄcom.dumaisoft.wxbremoteservice°üÖÐÉú³ÉjavaÎļþIWxbService.java¡£
¡¡¡¡IWxbService.aidl¶¨ÒåÁËÒ»¸öÔ¶³Ì½Ó¿Ú£¬Ëü°üº¬Á½¸ö·½·¨getNameºÍsetName¡£
¡¡¡¡µÚÈý²½£¬±àд·þÎñÀà
¡¡¡¡Ìí¼ÓÒ»¸öWxbServiceÀ࣬Ëü¼Ì³ÐÁËServiceÀ࣬Դ´úÂëÈçÏ£º
¡¡¡¡
- package com.dumaisoft.wxbremoteservice;
- ¡¡¡¡import com.dumaisoft.wxbremoteservice.IWxbService.Stub;
- ¡¡¡¡import android.app.Service;
- ¡¡¡¡import android.content.Intent;
- ¡¡¡¡import android.os.IBinder;
- ¡¡¡¡import android.os.RemoteException;
- ¡¡¡¡public class WxbService extends Service {
- ¡¡¡¡private ServiceImpl serviceImpl;
- ¡¡¡¡//¼Ì³ÐÓÉIWxbService.aidlÉú³ÉµÄcom.dumaisoft.wxbremoteservice.IWxbService.StubÀà
- ¡¡¡¡class ServiceImpl extends Stub{
- ¡¡¡¡private String _name;
- ¡¡¡¡@Override
- ¡¡¡¡public void setName(String name) throws RemoteException {
- ¡¡¡¡_name = name;
- ¡¡¡¡}
- ¡¡¡¡@Override
- ¡¡¡¡public String getName() throws RemoteException {
- ¡¡¡¡return _name;
- ¡¡¡¡}
- ¡¡¡¡}
- ¡¡¡¡//½«ServiceImpl×öÒ»¸ö¼òµ¥µÄµ¥Àýģʽ
- ¡¡¡¡private ServiceImpl getInstance(){
- ¡¡¡¡if(serviceImpl == null){
- ¡¡¡¡serviceImpl = new ServiceImpl();
- ¡¡¡¡}
- ¡¡¡¡return serviceImpl;
- ¡¡¡¡}
- ¡¡¡¡@Override
- ¡¡¡¡public IBinder onBind(Intent intent) {
- ¡¡¡¡return getInstance();
- ¡¡¡¡}
- ¡¡¡¡}
¡¡¡¡Í¨¹ýÑо¿´úÂë¿ÉÖª£¬ºÍÆÕͨµÄ·þÎñÀàÏà±È£¬Ô¶³Ì·þÎñÀà×î´óµÄÇø±ð¾ÍÊÇËüÓµÓÐÒ»¸öÃûΪServiceImplµÄ³ÉÔ±±äÁ¿£¬Õâ¸ö³ÉÔ±±äÁ¿¼Ì³ÐÁËStubÀ࣬²¢ÊµÏÖÁËStubÀàµÄgetNameºÍsetName·½·¨¡£Õâ¸öStubÀà¾ÍÊÇÓÉ IWxbService.aidlÉú³ÉµÄIWxbService.javaÌṩµÄ¡£ÎÒÃDz»ÓÃÑо¿ÆäÔ´´úÂ룬ֻÓÃÖªµÀËüµÄÓ÷¨£º
¡¡¡¡µÚÒ»£ºÈÃServiceµÄÒ»¸ö³ÉÔ±±äÁ¿¼Ì³ÐStub£¬²¢ÊµÏÖÔ¶³Ì½Ó¿ÚµÄ·½·¨;
¡¡¡¡µÚ¶þ£ºÔÚServiceµÄonBind·½·¨Öзµ»ØÒ»¸öStub×ÓÀàµÄʵÀý¡£
¡¡¡¡µÚËIJ½£¬ÅäÖÃAndroidManifest.xml
¡¡¡¡¼ÓÉÏÈçÏ´úÂ룺
- <service android:name="WxbService">
- <intent-filter>
- <action android:name="com.dumaisoft.wxbremoteservice.REMOTE_SREVICE"/>
- </intent-filter>
- </service>
¡¡¡¡×¢ÒâactionµÄnameΪ”com.dumaisoft.wxbremoteservice.REMOTE_SREVICE”£¬Õâ¸öÓÉ¿ª·¢Õß±£Ö¤²»ÖØÃû¼´¿É¡£
¡¡¡¡µÚÎå²½£¬°²×°appµ½ÊÖ»úÉÏ
¡¡¡¡°²×°Íê³Éºó£¬ÄãµÄÔ¶³Ì·þÎñ¾Í±»×¢²áµ½BinderºÚºÐ×ÓÖÐÁË£¬Èκοͻ§¶ËÖ»ÒªÖªµÀÄãµÄÔ¶³Ì·þÎñactionÃû³ÆºÍ½Ó¿Ú£¬¾Í¿ÉÒÔbind·þÎñ£¬²¢µ÷Óýӿڡ£
¡¡¡¡Ô¶³Ì·þÎñµ÷Óý̳Ì
¡¡¡¡µÚÒ»²½£¬´´½¨Ò»¸öandroidÓ¦ÓÃ
¡¡¡¡Ó¦ÓÃÃûΪWxbRemoteServiceClient£¬src°üÖÐ×Ô¶¯Éú³ÉÁËcom.dumaisoft.wxbremoteserviceclient°ü¡£
¡¡¡¡µÚ¶þ²½£¬ÒýÈëÔ¶³Ì·þÎñµÄAIDLÎļþ
¡¡¡¡ÔÚsrc°üÖд´½¨com.dumaisoft.wxbremoteservice°ü(ΪÁËÓë·þÎñ¶ËµÄ°üÃûÏàͬ)£¬È»ºó½«ÉÏÃæ±àдµÄIWxbService.aidlÎļþ¿½±´Èë´ËĿ¼¡£ÏÔÈ»£¬ÔÚ±¾¹¤³ÌµÄgenĿ¼ÖÐÒ²Éú³ÉÁËIWxbService.javaÎļþ¡£
¡¡¡¡µÚÈý²½£¬±àдµ÷ÓÃÔ¶³Ì·þÎñµÄ´úÂë
¡¡¡¡´úÂëÈçÏ£º
- package com.dumaisoft.wxbremoteserviceclient;
- ¡¡import com.dumaisoft.wxbremoteservice.IWxbService;
- ¡¡import android.app.Activity;
- ¡¡import android.app.Service;
- ¡¡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.view.View.OnClickListener;
- ¡¡import android.widget.Button;
- ¡¡import android.widget.Toast;
- ¡¡public class MainActivity extends Activity {
- ¡¡private Button btnBind;
- ¡¡private Button btnSetName;
- ¡¡private Button btnGetName;
- ¡¡private IWxbService serviceProxy; //Ô¶³Ì·þÎñµÄ´úÀí
- ¡¡private ServiceConnection conn = new ServiceConnection() {
- ¡¡@Override
- ¡¡public void onServiceDisconnected(ComponentName name) {
- ¡¡}
- ¡¡@Override
- ¡¡public void onServiceConnected(ComponentName name, IBinder service) {
- ¡¡//»ñÈ¡Ô¶³Ì·þÎñ´úÀí
- ¡¡serviceProxy = IWxbService.Stub.asInterface(service);
- ¡¡}
- ¡¡};
- ¡¡@Override
- ¡¡protected void onCreate(Bundle savedInstanceState) {
- ¡¡super.onCreate(savedInstanceState);
- ¡¡setContentView(R.layout.activity_main);
- ¡¡btnBind = (Button) this.findViewById(R.id.btnBind);
- ¡¡btnSetName = (Button) this.findViewById(R.id.btnSetName);
- ¡¡btnGetName = (Button) this.findViewById(R.id.btnGetName);
- ¡¡btnBind.setOnClickListener(new OnClickListener() {
- ¡¡@Override
- ¡¡public void onClick(View v) {
- ¡¡Intent service = new Intent();
- ¡¡//Remote Service Action name
- ¡¡service.setAction("com.dumaisoft.wxbremoteservice.REMOTE_SREVICE");
- ¡¡bindService(service, conn, Service.BIND_AUTO_CREATE);
- ¡¡}
- ¡¡});
- ¡¡btnSetName.setOnClickListener(new OnClickListener() {
- ¡¡@Override
- ¡¡public void onClick(View v) {
- ¡¡try {
- ¡¡serviceProxy.setName("MyName");
- ¡¡} catch (RemoteException e) {
- ¡¡e.printStackTrace();
- ¡¡}
- ¡¡}
- ¡¡});
- ¡¡btnGetName.setOnClickListener(new OnClickListener() {
- ¡¡@Override
- ¡¡public void onClick(View v) {
- ¡¡try {
- ¡¡String name = serviceProxy.getName();
- ¡¡Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG).show();
- ¡¡} catch (RemoteException e) {
- ¡¡e.printStackTrace();
- ¡¡}
- ¡¡}
- ¡¡});
- ¡¡}
- ¡¡}
- ¡¡
¡¡¡¡×¢Ò⼸µã£º
¡¡¡¡Ò»¡¢´´½¨Ò»¸öServiceConnectionµÄÄäÃû×ÓÀ࣬ÔÚÆäonServiceConnected·½·¨ÖлñÈ¡Ô¶³Ì·þÎñ´úÀí¶ÔÏóserviceProxy¡£ÊÂʵÉÏ£¬onServiceConnected·½·¨»áÔÚbindService·½·¨µ÷ÓÃʱ±»µ÷Óã¬Òò´ËÄÜÈ·±£Ò»¶¨¿ÉÒÔ»ñµÃÔ¶³Ì·þÎñµÄ´úÀí¶ÔÏó;
¡¡¡¡¶þ¡¢IWxbService.Stub.asInterface(service)·½·¨Ò²ÊÇÓÉIWxbService.javaÎļþÌṩµÄ£¬ÆäÄÚ²¿»úÖƲ»ÓÃÑо¿£¬Ö»ÐèÒªÖªµÀËü»á·µ»ØÒ»¸öIWxbService½Ó¿ÚµÄ¶ÔÏ󣬸öÔÏó¿ÉÒÔͨ¹ýBinderºÚºÐ×Óµ÷ÓÃÔ¶³Ì·þÎñµÄsetNameºÍgetName·½·¨;
¡¡¡¡Èý¡¢Ê¹ÓÃIntentÖ¸¶¨actionΪ”com.dumaisoft.wxbremoteservice.REMOTE_SREVICE”£¬¼´¿ÉÕýÈ·µÄbindµ½Ô¶³Ì·þÎñ¡£
¡¡¡¡ËÄ¡¢bind³É¹¦ºó£¬¾Í¿ÉÒÔͨ¹ýÔ¶³Ì·þÎñµÄ´úÀí¶ÔÏó£¬Ê¹ÓÃÔ¶³Ì·þÎñµÄ¹¦ÄÜÁË¡£
¡¡¡¡Ð¡½á
¡¡¡¡ÖÁ´Ë£¬¶ÁÕßÓ¦¸ÃÄܱȽϿìËٵĿª·¢³öÒ»¸öÔ¶³Ì·þÎñ£¬²¢Äܱàд¿Í»§¶ËÇáËɵĵ÷ÓÃËüÁË¡£»¹ÓÐÒ»µãÐèҪ˵Ã÷µÄÊÇ£¬³ýÁËʹÓÃAIDLÀ´½øÐÐÔ¶³Ì·þÎñµÄ±àдºÍµ÷ÓÃÍ⣬»¹¿ÉÒÔÖ±½ÓʹÓÃIBinder¡¢BinderµÈ½Ó¿ÚºÍÀàÀ´½øÐÐÔ¶³Ì·þÎñ±àдµ÷ÓᣱϾ¹AIDLÖ»ÊÇÒ»ÖÖ±àдbinder¿ò¼ÜµÄ¹¤¾ß¡£
¡¡¡¡ÈôÕæµÄÏëÏêϸÁ˽âbinder»úÖÆ£¬¿ÉÒÔÈ¥ÏêϸÔĶÁaidlÉú³ÉµÄ´úÂ룬²¢ÔĶÁÆäËû´óÉñµÄÎÄÕ¡£
תÔØÇë×¢Ã÷£º ÎÄÕÂתÔØ×Ô£º°®Ë¼×ÊÔ´Íø http://www.aseoe.com/show-17-742-1.html