Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
3·ÖÖÓ´øÄã¿´¶®androidÖеÄBinder»úÖÆ
 
×÷ÕߣºHanking65203
  2567  次浏览      28
2020-11-23 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷ÒªÕ¾ÔÚAndroid¿ª·¢µÄ½Ç¶ÈÀ´´óÖ½âÎöÏÂBinderÔÚjava²ãµÄһЩ֪ʶԭÀí.
±¾ÎÄÀ´×ÔÓÚ˼·ñ£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Ò».ÒýÑÔ

×î½üÒ»¶Îʱ¼äÓÉÓÚ¹¤×÷£¬½Ó´¥µ½framework²¿·Ö±È½Ï¶àÒ»µã£¬Ò²ÄÑÃâÒªºÍBinder´òһЩ½»µÀ£¬Ò²ÕûÀíÁËһЩÏà¹ØÖªÊ¶£¬µ«×¼±¸Ð´ÕâÆªÎÄÕÂʱ£¬»¹ÊÇÓÐЩ»Å¡£¶øÇÒ¹ØÓÚÕû¸öBinder»úÖÆµÄ¸´Ôӳ̶Ȳ»ÊÇÈýÑÔÁ½ÓïÄÜÃèÐðÇå³þµÄ£¬Ò²º¦ÅÂ×Ô¼ºµÄÀí½âÓÐЩƫ²î£¬Îóµ¼Ò»Ð©ÅóÓÑ£¨ps:·´ÕýҲûÈË¿´....ÔúÐÄ£©ËùÒÔÒ²²Î¿¼Á˺ܶà×ÊÁÏ,¸ø´ó¼ÒÄÔ×ÓÐγÉÒ»¸öÍêÕûµÄ¸ÅÄ±ÈÈçAIDLµÄʵÏÖÔ­Àí£¬BinderÊÇÔõôͨÐŵĵȵȣ¬ÎÄÕÂÎÄ×ֽ϶࣬ÇëÄÍÐĹۿ´¡£

¶þ.Binder¸ÅÊö

2.1 AndroidΪʲôѡÔñBinder

AndroidÊÇ»ùÓÚLinuxÄں˵ģ¬ËùÒÔAndroidҪʵÏÖ½ø³Ì¼äµÄͨÐÅ£¬Æäʵ´ó¿ÉʹÓÃlinuxÔ­ÓеÄһЩÊֶΣ¬±ÈÈç¹ÜµÀ£¬¹²ÏíÄڴ棬socketµÈ·½Ê½£¬µ«ÊÇAndroid»¹ÊDzÉÓÃÁËBinder×÷ΪÖ÷Òª»úÖÆ£¬ËµÃ÷Binder¾ßÓÐÎ޿ɱÈÄâµÄÓÅÊÆ¡£

Æäʵ½ø³ÌͨÐÅ´ó¸Å¾ÍÁ½¸ö·½ÃæÒòËØ£¬Ò»ÕßÐÔÄÜ·½Ã棬´«ÊäЧÂÊÎÊÌ⣬´«Í³µÄ¹ÜµÀ¶ÓÁÐģʽ²ÉÓÃÄڴ滺³åÇøµÄ·½Ê½£¬Êý¾ÝÏÈ´Ó·¢ËÍ·½»º´æÇø¿½±´µ½Äں˿ª±ÙµÄ»º´æÇøÖУ¬È»ºóÔÙ´ÓÄں˻º´æÇø¿½±´µ½½ÓÊÕ·½»º´æÇø£¬ÖÁÉÙÓÐÁ½´Î¿½±´¹ý³Ì£¬¶øsocket¶¼ÖªµÀ´«ÊäЧÂʵͣ¬¿ªÏú´ó£¬ÓÃÓÚ¿çÍøÂç½ø³Ì½»»¥±È½Ï¶à£¬¹²ÏíÄÚ´æËäÈ»ÎÞÐ追±´¡£

¶þÕßÕâÊǰ²È«ÎÊÌ⣬Android×÷Ϊһ¸ö¿ª·Åʽ£¬ÓµÓÐÖڶ࿪·¢Õߵĵį½Ì¨£¬Ó¦ÓóÌÐòµÄÀ´Ô´¹ã·º£¬È·±£Öն˰²È«ÊǷdz£ÖØÒªµÄ£¬´«Í³µÄIPCͨÐÅ·½Ê½Ã»ÓÐÈκδëÊ©£¬»ù±¾ÒÀ¿¿ÉϲãЭÒ飬ÆäÒ»ÎÞ·¨È·È϶Է½¿É¿¿µÄÉí·Ý£¬AndroidΪÿ¸ö°²×°ºÃµÄÓ¦ÓóÌÐò·ÖÅäÁË×Ô¼ºµÄUID£¬¹Ê½ø³ÌµÄUIDÊǼø±ð½ø³ÌÉí·ÝµÄÖØÒª±êÖ¾£¬´«Í³µÄIPCÒª·¢ËÍÀàËÆµÄUIDÒ²Ö»ÄÜ·ÅÔÚÊý¾Ý°üÀµ«Ò²ÈÝÒ×±»À¹½Ø£¬¶ñÒâ½ø¹¥£¬socketÔòÐèÒª±©Â¶×Ô¼ºµÄipºÍ¶Ë¿Ú£¬ÖªµÀÕâЩ¶ñÒâ³ÌÐòÔò¿ÉÒÔ½øÐÐÈÎÒâ½ÓÈë¡£

×ÛÉÏËùÊö£¬AndroidÐèÒªÒ»ÖÖ¸ßЧÂÊ£¬°²È«ÐԸߵĽø³ÌͨÐÅ·½Ê½£¬Ò²¾ÍÊÇBinder£¬BinderÖ»ÐèÒªÒ»´Î¿½±´£¬ÐÔÄܽö´ÎÓÚ¹²ÏíÄڴ棬¶øÇÒ²ÉÓõĴ«Í³µÄC/S½á¹¹£¬Îȶ¨ÐÔÒ²ÊÇûµÃ˵£¬·¢ËÍÌí¼ÓUID/PID£¬°²È«ÐԸߡ£

2.2 BinderʵÏÖ»úÖÆ

2.2.1½ø³Ì¸ôÀë

ÎÒÃÇÖªµÀ½ø³ÌÖ®¼äÊÇÎÞ·¨Ö±½Ó½øÐн»»¥µÄ£¬Ã¿¸ö½ø³Ì¶ÀÏí×Ô¼ºµÄÊý¾Ý£¬¶øÇÒ²Ù×÷ϵͳΪÁ˱£Ö¤×ÔÉíµÄ°²È«Îȶ¨ÐÔ£¬½«ÏµÍ³Äں˿ռäºÍÓû§¿Õ¼ä·ÖÀ뿪À´£¬±£Ö¤Óû§³ÌÐò½ø³Ì±ÀÀ£Ê±²»»áÓ°Ïìµ½Õû¸öϵͳ£¬¼òµ¥µÄ˵¾ÍÊÇ£¬Äں˿ռ䣨Kernel£©ÊÇϵͳÄÚºËÔËÐеĿռ䣬Óû§¿Õ¼ä£¨UserSpace£©ÊÇÓû§³ÌÐòÔËÐеĿռ䡣ΪÁ˱£Ö¤°²È«ÐÔ£¬ËüÃÇÖ®¼äÊǸôÀëµÄ£¬ËùÒÔÓû§¿Õ¼äµÄ½ø³ÌÒª½øÐн»»¥ÐèҪͨ¹ýÄں˿ռäÀ´Çý¶¯Õû¸ö¹ý³Ì¡£

2.2.2 C/S½á¹¹

BinderÊÇ»ùÓÚC/S»úÖÆµÄ£¬ÒªÊµÏÖÕâÑùµÄ»úÖÆ£¬server±ØÐëÐèÒªÓÐÌØ¶¨µÄ½ÚµãÀ´½ÓÊܵ½clientµÄÇëÇó£¬Ò²¾ÍÊÇÈë¿ÚµØÖ·£¬ÏñÊäÈëÒ»¸öÍøÖ·£¬Í¨¹ýDNS½âÎö³ö¶ÔÓ¦µÄip£¬È»ºó½øÐзÃÎÊ£¬Õâ¸ö¾ÍÊÇserverÌṩ³öÀ´µÄ½ÚµãµØÖ·£¬¶øBinder¶øÑԵϰ£¬Ó봫ͳµÄC/S²»Ì«Ò»Ñù£¬Binder±¾ÉíÀ´×÷ΪServerÖÐÌṩµÄ½Úµã£¬clientÄõ½BinderʵÌå¶ÔÏó¶ÔÓ¦µÄµØÖ·È¥·ÃÎÊServer£¬¶ÔÓÚclient¶øÑÔ£¬ÔõôÄõ½Õâ¸öµØÖ·²¢½¨Á¢ÆðÕû¸öͨµÀÊÇÕû¸ö½»»¥µÄ¹Ø¼üËùÔÚ£¬¶øÇÒBinder×÷Ϊһ¸öServerÖеÄʵÌ壬¶ÔÏóÌṩһϵÁеķ½·¨À´ÊµÏÖ·þÎñ¶ËºÍ¿Í»§¶ËÖ®¼äµÄÇëÇó£¬Ö»ÒªclientÄõ½Õâ¸öÒýÓþͿÉÒÔ»òÕßÒ»¸öÓÐן÷½·¨´úÀí¶ÔÏóµÄÒýÓ㬾ͿÉÒÔ½øÐÐͨÐÅÁË¡£

ÒýÓÃAndroid BanderÉè¼ÆÓëʵÏÖ - Éè¼ÆÆªÒ»¶Î»°À´×ܽ᣺

ÃæÏò¶ÔÏó˼ÏëµÄÒýÈ뽫½ø³Ì¼äͨÐÅת»¯ÎªÍ¨¹ý¶Ôij¸öBinder¶ÔÏóµÄÒýÓõ÷ÓøöÔÏóµÄ·½·¨£¬¶øÆä¶ÀÌØÖ®´¦ÔÚÓÚBinder¶ÔÏóÊÇÒ»¸ö¿ÉÒÔ¿ç½ø³ÌÒýÓõĶÔÏó£¬ËüµÄʵÌåλÓÚÒ»¸ö½ø³ÌÖУ¬¶øËüµÄÒýÓÃÈ´±é²¼ÓÚϵͳµÄ¸÷¸ö½ø³ÌÖ®ÖС£×îÓÕÈ˵ÄÊÇ£¬Õâ¸öÒýÓúÍjavaÀïÒýÓÃÒ»Ñù¼È¿ÉÒÔÊÇÇ¿ÀàÐÍ£¬Ò²¿ÉÒÔÊÇÈõÀàÐÍ£¬¶øÇÒ¿ÉÒÔ´ÓÒ»¸ö½ø³Ì´«¸øÆäËü½ø³Ì£¬Èôó¼Ò¶¼ÄÜ·ÃÎÊͬһServer£¬¾ÍÏó½«Ò»¸ö¶ÔÏó»òÒýÓø³Öµ¸øÁíÒ»¸öÒýÓÃÒ»Ñù¡£BinderÄ£ºýÁ˽ø³Ì±ß½ç£¬µ­»¯Á˽ø³Ì¼äͨÐŹý³Ì£¬Õû¸öϵͳ·Â·ðÔËÐÐÓÚͬһ¸öÃæÏò¶ÔÏóµÄ³ÌÐòÖ®ÖС£ÐÎÐÎɫɫµÄBinder¶ÔÏóÒÔ¼°ÐÇÂÞÆå²¼µÄÒýÓ÷·ðÕ³½Ó¸÷¸öÓ¦ÓóÌÐòµÄ½ºË®£¬ÕâÒ²ÊÇBinderÔÚÓ¢ÎÄÀïµÄÔ­Òâ¡£

2.2.3 BinderͨÐÅÄ£ÐÍ

Binder»ùÓÚC/SµÄ½á¹¹Ï£¬¶¨ÒåÁË4¸ö½ÇÉ«£ºServer¡¢Client¡¢ServerManager¡¢BinderÇý¶¯£¬ÆäÖÐǰÈýÕßÊÇÔÚÓû§¿Õ¼äµÄ£¬Ò²¾ÍÊDZ˴ËÖ®¼äÎÞ·¨Ö±½Ó½øÐн»»¥£¬BinderÇý¶¯ÊÇÊôÓÚÄں˿ռäµÄ£¬ÊôÓÚÕû¸öͨÐŵĺËÐÄ£¬ËäÈ»½ÐÇý¶¯£¬µ«ÊÇʵ¼ÊÉϺÍÓ²¼þûÓÐÌ«´ó¹ØÏµ£¬Ö»ÊÇʵÏֵķ½Ê½ºÍÇý¶¯²î²»¶à£¬Çý¶¯¸ºÔð½ø³ÌÖ®¼äBinderͨÐŵĽ¨Á¢£¬BinderÔÚ½ø³ÌÖ®¼äµÄ´«µÝ£¬BinderÒýÓüÆÊý¹ÜÀí£¬Êý¾Ý°üÔÚ½ø³ÌÖ®¼äµÄ´«µÝºÍ½»»¥µÈһϵÁеײãÖ§³Ö¡£

ServerManagerµÄ×÷Óã¿

ÎÒÃÇÖªµÀServerManagerÒ²ÊÇÊôÓÚÓû§¿Õ¼äµÄÒ»¸ö½ø³Ì£¬Ö÷Òª×÷ÓþÍÊÇ×÷ΪServerºÍclientµÄÇÅÁº£¬client¿ÉÒÔServerManagerÄõ½ServerÖÐBinderʵÌåµÄÒýÓã¬Õâô˵¿ÉÄÜÓеãÄ£ºý£¬¾Ù¸ö¼òµ¥µÄÀý×Ó£¬ÎÒÃÇ·ÃÎÊ£¬www.baidu.com£¬°Ù¶ÈÊ×Ò³Ò³Ãæ¾ÍÏÔʾ³öÀ´ÁË£¬Ê×ÏÈÎÒÃÇÖªµÀ£¬Õâ¸öÒ³Ãæ¿Ï¶¨ÊÇ·¢²¼ÔÚ°Ù¶Èij¸ö·þÎñÆ÷Éϵģ¬DNSͨ¹ýÄãÕâ¸öµØÖ·£¬½âÎö³ö¶ÔÓ¦µÄipµØÖ·£¬ÔÙÈ¥·ÃÎʶÔÓ¦µÄÒ³Ãæ£¬È»ºóÔÙ°ÑÊý¾Ý·µ»Ø¸ø¿Í»§¶Ë£¬Íê³É½»»¥¡£Õâ¸öºÍBinderµÄC/S·Ç³£ÀàËÆ£¬ÕâÀïµÄDNS¾ÍÊǶÔÓ¦µÄServerManager£¬Ê×ÏÈ£¬ServerÖеÄBinderʵÌå¶ÔÏ󣬽«×Ô¼ºµÄÒýÓã¨Ò²¾ÍÊÇipµØÖ·£©×¢²áµ½ServerManager£¬clientͨ¹ýÌØ¶¨µÄkey£¨Ò²¾ÍÊǰٶÈÕâ¸öÍøÖ·£©ºÍÕâ¸öÒýÓýøÐа󶨣¬ServerManagerÄÚ²¿×Ô¼ºÎ¬»¤Ò»¸öÀàËÆMAPµÄ±íÀ´Ò»Ò»¶ÔÓ¦£¬Í¨¹ýÕâ¸ökey¾Í¿ÉÒÔÏòServerManagerÄõ½ServerÖÐBinderµÄÒýÓ㬶ÔÓ¦µ½Android¿ª·¢ÖУ¬ÎÒÃÇÖªµÀºÜ¶àϵͳ·þÎñ¶¼ÊÇͨ¹ýBinderÈ¥ºÍAMS½øÐн»»¥µÄ£¬±ÈÈç»ñÈ¡ÒôÁ¿·þÎñ£º

AudioManager am = (AudioManager) context.getSystemService (Context.AUDIO_SERVICE);

ϸÐĵÄÅóÓÑÓ¦¸Ã·¢ÏÖServerManagerºÍServerÒ²ÊÇÁ½¸ö²»Í¬µÄ½ø³Ìѽ£¬ServerÒªÏòServerManagerÈ¥×¢²á²»ÊÇÒ²ÒªÉæ¼°µ½½ø³Ì¼äµÄͨÐÅÂ𣬵±Ç°ÊµÏÖ½ø³Ì¼äͨÐÅÓÖÒªÓõ½½ø³Ì¼äµÄͨÐÅ£¬ÄãÕâ²»Êdz¶¶¿×ÓÂð....μ±Äª¼±£¬BinderµÄÇÉÃîÖ®´¦ÔÚÓÚ£¬µ±ServerManager×÷ΪServe¶ËµÄʱºò£¬ËüÌṩµÄBinder±È½ÏÌØÊ⣬ËüûÓÐÃû×ÖÒ²²»ÐèҪע²á£¬µ±Ò»¸ö½ø³ÌʹÓÃBINDER_SET_CONTEXT_MGRÃüÁ×Ô¼º×¢²á³ÉSMgrʱBinderÇý¶¯»á×Ô¶¯ÎªËü´´½¨BinderʵÌ壬Õâ¸öBinderµÄÒýÓÃÔÚËùÓÐClientÖж¼¹Ì¶¨Îª0¶øÎÞÐëͨ¹ýÆäËüÊֶλñµÃ¡£Ò²¾ÍÊÇ˵£¬Ò»¸öServerÈôÒªÏòServerManager×¢²á×Ô¼ºBinder¾Í±ØÐèͨ¹ý0Õâ¸öÒýÓúźÍServerManagerµÄBinderͨÐÅ,ÓÐÅóÓÑÓÖÒªÎÊÁË£¬serverºÍclientÊôÓÚÁ½¸ö²»Í¬µÄ½ø³Ì£¬clientÔõôÄÜÄõ½serverÖжÔÏ󣬲»·ÁÏÈ¿´¿´ÏÂÃæµÄ½»»¥Í¼

´ÓÉÏͼºÜÇåÎúµÄ¿ÉÒÔ¿´³öÀ´Õû¸öµÄ½»»¥¹ý³Ì£¬Ô­±¾´ÓSMÖÐÄõ½binderµÄÒýÓã¬Í¨¹ýBinderÇý¶¯²ãµÄ´¦ÀíÖ®ºó£¬·µ»Ø¸øÁËclientÒ»¸ö´úÀí¶ÔÏó£¬Êµ¼ÊÉÏÈç¹ûclientºÍserver´¦ÓÚͬһ¸ö½ø³Ì£¬·µ»ØµÄ¾ÍÊǵ±Ç°binder¶ÔÏó£¬Èç¹ûclientºÍserver²»´¦ÓÚͬһ¸ö½ø³Ì£¬·µ»Ø¸øclientµÄ¾ÍÊÇÒ»¸ö´úÀí¶ÔÏó£¬ÕâÒ»µã£¬ÓÐÐËȤ¿ÉÒÔ¿´ÏÂÔ´Âë¡£

2.2.4 Binder½ÇÉ«µÄ¶¨Î»

Binder±¾ÖÊÉÏÖ»ÊÇÌṩÁËÒ»ÖÖͨÐŵķ½Ê½£¬ºÍÎÒÃǾßÌåҪʵÏÖµÄÄÚÈÝûÓйØÏµ£¬ÎªÁËʵÏÖÕâ¸ö·þÎñ£¬ÎÒÃÇÐèÒª¶¨ÒåһЩ½Ó¿Ú£¬ÈÃclientÄܹ»Ô¶³Ìµ÷Ó÷þÎñ£¬ÒòΪÊÇ¿ç½ø³Ì£¬Õâʱºò¾ÍÒªÉè¼Æµ½´úÀíģʽ£¬ÒÔ½Ó¿Úº¯Êýλ»ù×¼£¬clientºÍserverȥʵÏÖ½Ó¿Úº¯Êý£¬ServerÊÇ·þÎñÕæÕýµÄʵÏÖ£¬client×÷Ϊһ¸öÔ¶³ÌµÄµ÷Óá£

´ÓServer½ø³ÌÀ´¿´£¬BinderÊÇ´æÔÚµÄʵÌå¶ÔÏó£¬clientͨ¹ýtransact()º¯Êý£¬¾­¹ýBinderÇý¶¯£¬×îÖջص÷µ½BinderʵÌåµÄonTransact()º¯ÊýÖС£

´Ó Client½ø³ÌµÄ½Ç¶È¿´£¬Binder Ö¸µÄÊÇ¶Ô Binder ´úÀí¶ÔÏó£¬ÊÇ Binder ʵÌå¶ÔÏóµÄÒ»¸öÔ¶³Ì´úÀí£¬Í¨¹ýBinderÇý¶¯½øÐн»»¥

3.ÊÖд³Ìͨ½øÐÅ

ÉÏÃæËµÁËÄÇô¶à£¬´ó¼Ò»ïÒ²¿´ÀÛÁË£¬ÏÂÃæÍ¨¹ý´úÂëµÄÐÎʽÈôó¼Ò¶ÔBinder¼ÓÉîµãÀí½â£¬ÈÕ³£¿ª·¢ÖУ¬Éæ¼°µ½½ø³Ì¼äͨÐŵϰ£¬ÎÒÃÇÊ×ÏÈÏëµ½µÄ¿ÉÄܾÍÊÇAIDL£¬µ«²»ÖªµÀÓÐûÓкÍÎҸоõÒ»ÑùµÄÅóÓÑ¡£¡£µÚÒ»´ÎдAIDLÊÇÃɱεģ¬Í¨¹ý.aidlÎļþ£¬±àÒëÆ÷×Ô¶¯Éú³É´úÂ룬Éú³ÉÒ»¸öjavaÎļþ£¬ÀïÃæÓÖÓÐStubÀ࣬ÀïÃæ»¹ÓÐProxyÀ࣬ÍêÈ«²»Àí½âÀïÃæµÄ»úÖÆ£¬È·Êµ²»±ãÓÚÎÒÃÇÀí½âѧϰ£¬ÎªÁ˼ÓÉîÀí½â£¬ÎÒÃÇÅׯúaidl£¬ÊÖдһ¸öͨÐÅ´úÂë¡£

Ê×ÏÈÎÒÃÇÒª¶¨ÒåÒ»¸ö½Ó¿Ú·þÎñ£¬Ò²¾ÍÊÇÉÏÊöµÄ·þÎñ¶ËÒª¾ß±¸µÄÄÜÁ¦À´Ìṩ¸ø¿Í»§¶Ë,¶¨ÒåÒ»¸ö½Ó¿Ú¼Ì³ÐIInterface£¬´ú±íÁË·þÎñ¶ËµÄÄÜÁ¦

public interface PersonManger extends IInterface {
void addPerson(Person mPerson);
List<Person> getPersonList();
}

 

½ÓÏÂÀ´ÎÒÃǾÍÒª¶¨ÒåÒ»¸öServerÖеÄBinderʵÌå¶ÔÏóÁË£¬Ê×Ïȿ϶¨Òª¼Ì³ÐBinder£¬Æä´ÎÐèҪʵÏÖÉÏÃæ¶¨ÒåºÃµÄ·þÎñ½Ó¿Ú

public abstract class BinderObj extends Binder implements PersonManger {
public static final String DESCRIPTOR = "com.example.taolin.hellobinder";
public static final int TRANSAVTION_getPerson = IBinder.FIRST_CALL_TRANSACTION;
public static final int TRANSAVTION_addPerson = IBinder.FIRST_CALL_TRANSACTION + 1;
public static PersonManger asInterface(IBinder mIBinder){
IInterface iInterface = mIBinder.queryLocalInterface (DESCRIPTOR);
if (null!=iInterface &&iInterface instanceof PersonManger){
return (PersonManger)iInterface;
}
return new Proxy(mIBinder);
}
@Override
protected boolean onTransact (int code, @NonNull Parcel data, @Nullable Parcel reply, int flags) throws RemoteException {
switch (code){
case INTERFACE_TRANSACTION:
reply.writeString(DESCRIPTOR);
return true;
case TRANSAVTION_getPerson:
data.enforceInterface(DESCRIPTOR);
List<Person> result = this.getPersonList();
reply.writeNoException();
reply.writeTypedList(result);
return true;
case TRANSAVTION_addPerson:
data.enforceInterface(DESCRIPTOR);
Person arg0 = null;
if (data.readInt() != 0) {
arg0 = Person.CREATOR.createFromParcel (data);
}
this.addPerson(arg0);
reply.writeNoException();
return true;
}
return super.onTransact (code, data, reply, flags);
}
@Override
public IBinder asBinder() {
return this;
}

}

Ê×ÏÈÎÒÃÇ¿´asInterface·½·¨£¬BinderÇý¶¯´«À´µÄIBinder¶ÔÏó£¬Í¨¹ýqueryLocalInterface·½·¨£¬²éÕÒ±¾µØBinder¶ÔÏó£¬Èç¹û·µ»ØµÄ¾ÍÊÇPersonManger£¬ËµÃ÷clientºÍserver´¦ÓÚͬһ¸ö½ø³Ì£¬Ö±½Ó·µ»Ø£¬Èç¹û²»ÊÇ£¬·µ»Ø¸øÒ»¸ö´úÀí¶ÔÏó¡£

µ±È»×÷Ϊ´úÀí¶ÔÏó£¬Ò²ÊÇÐèҪʵÏÖ·þÎñ½Ó¿Ú

public class Proxy implements PersonManger {
private IBinder mIBinder;
public Proxy(IBinder mIBinder) {
this.mIBinder =mIBinder;
}

@Override
public void addPerson(Person mPerson) {
Parcel data = Parcel.obtain();
Parcel replay = Parcel.obtain();
try {
data.writeInterfaceToken(DESCRIPTOR);
if (mPerson != null) {
data.writeInt(1);
mPerson.writeToParcel(data, 0);
} else {
data.writeInt(0);
}
mIBinder.transact (BinderObj.TRANSAVTION_addPerson, data, replay, 0);
replay.readException();
} catch (RemoteException e){
e.printStackTrace();
} finally {
replay.recycle();
data.recycle();
}
}
@Override
public List<Person> getPersonList() {
Parcel data = Parcel.obtain();
Parcel replay = Parcel.obtain();
List<Person> result = null;
try {
data.writeInterfaceToken(DESCRIPTOR);
mIBinder.transact (BinderObj.TRANSAVTION_getPerson, data, replay, 0);
replay.readException();
result = replay.createTypedArrayList (Person.CREATOR);
}catch (RemoteException e){
e.printStackTrace();
} finally{
replay.recycle();
data.recycle();
}
return result;
}
@Override
public IBinder asBinder() {
return null;
}
}

ÕâÀïµÄ´úÀí¶ÔÏóʵÖʾÍÊÇclient×îÖÕÄõ½µÄ´úÀí·þÎñ£¬Í¨¹ýÕâ¸ö¾Í¿ÉÒÔºÍServer½øÐÐͨÐÅÁË£¬Ê×ÏÈͨ¹ýParcel½«Êý¾ÝÐòÁл¯£¬È»ºóµ÷Óà remote.transact()½«·½·¨code£¬ºÍdata´«Êä¹ýÈ¥£¬¶ÔÓ¦µÄ»á»Øµ÷ÔÚÔÚServerÖеÄonTransact()ÖÐ

È»ºóÊÇÎÒÃǵÄServer½ø³Ì,onBind·½·¨·µ»ØmStub¶ÔÏó£¬Ò²¾ÍÊÇServerÖеÄBinderʵÌå¶ÔÏó

public class ServerSevice extends Service {
private static final String TAG = "ServerSevice";
private List<Person> mPeople = new ArrayList<>();

@Override
public void onCreate() {
mPeople.add(new Person());
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mStub;
}
private BinderObj mStub = new BinderObj() {
@Override
public void addPerson(Person mPerson) {
if (mPerson==null){
mPerson = new Person();
Log.e(TAG,"null obj");
}
mPeople.add(mPerson);
Log.e(TAG,mPeople.size()+"");
}
@Override
public List<Person> getPersonList() {
return mPeople;
}
};
}

×îÖÕÎÒÃÇÔÚ¿Í»§¶Ë½ø³Ì£¬bindService´«ÈëÒ»¸öServiceConnection¶ÔÏó£¬ÔÚÓë·þÎñ¶Ë½¨Á¢Á¬½Óʱ£¬Í¨¹ýÎÒÃǶ¨ÒåºÃµÄBinderObjµÄasInterface·½·¨·µ»ØÒ»¸ö´úÀí¶ÔÏó£¬ÔÙµ÷Ó÷½·¨½øÐн»»¥

public class MainActivity extends AppCompatActivity {
private boolean isConnect = false;
private static final String TAG = "MainActivity";
private PersonManger personManger;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView (R.layout.activity_main);
start();
findViewById (R.id.textView).setOnClickListener (new View.OnClickListener() {
@Override
public void onClick(View v) {
if (personManger==null){
Log.e (TAG,"connect error");
return;
}
personManger.addPerson(new Person());
Log.e (TAG,personManger.getPersonList().size()+"");
}
});
}
private void start() {
Intent intent = new Intent (this, ServerSevice.class);
bindService (intent,mServiceConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.e(TAG,"connect success");
isConnect = true;
personManger = BinderObj.asInterface(service);
List<Person> personList = personManger.getPersonList();
Log.e(TAG,personList.size()+"");
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e(TAG,"connect failed");
isConnect = false;
}
};
}

 

ÕâÑùµÄ»°£¬Ò»´ÎÍê³ÉµÄ½ø³Ì¼äµÄ½»»¥¾ÍÍê³ÉÁË~ÊDz»ÊǸоõûÓÐÏëÏóÖÐÄÇôÄÑ£¬×îºó½¨Òé´ó¼ÒÔÚ²»½èÖú AIDL µÄÇé¿öÏÂÊÖдʵÏÖ Client ºÍ Server ½ø³ÌµÄͨÐÅ£¬¼ÓÉî¶Ô Binder ͨÐŹý³ÌµÄÀí½â¡£

 

 
   
2567 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
Flutter-Ä㻹ÔÚÀÄÓÃStatefulWidgetÂð
ÒÆ¶¯APP°²È«²âÊÔÒªµã
ÉîÈëdz³ö Kotlin Э³Ì
iOS ×é¼þ»¯ ¡ª¡ª ·ÓÉÉè¼ÆË¼Â··ÖÎö
ÒÆ¶¯¶Ë¿çƽ̨¿ª·¢µÄÉî¶È½âÎö
×îпγÌ
Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
AndroidÓ¦Óø߼¶¿ª·¢
ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢£¨iOS£¬Android£¬HTML5)
³É¹¦°¸Àý
±±¾© iOS¿ª·¢¼¼ÊõÉîÈëÑо¿
ijÆóÒµ Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
ÖÐÌå²Ê Android²úÆ·¼¶²âÊÔ
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ