AndroidÉîÈëdz³öÖ®Binder»úÖÆ

2014-11-24 09:49:51 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

Ò» ˵Ã÷


ÎÒÃÇÕâÀォÒÔMediaServiceµÄÀý×ÓÀ´·ÖÎöBinderµÄʹÓãº


ServiceManager£¬ÕâÊÇAndroid OSµÄÕû¸ö·þÎñµÄ¹ÜÀí³ÌÐò


MediaService£¬Õâ¸ö³ÌÐòÀï±ß×¢²áÁËÌṩýÌå²¥·ÅµÄ·þÎñ³ÌÐòMediaPlayerService£¬ÎÒÃÇ×îºóÖ»·ÖÎöÕâ¸ö


MediaPlayerClient£¬Õâ¸öÊÇÓëMediaPlayerService½»»¥µÄ¿Í»§¶Ë³ÌÐò


ÏÂÃæÏȽ²½²MediaServiceÓ¦ÓóÌÐò¡£


¶þ MediaServiceµÄµ®Éú


MediaServiceÊÇÒ»¸öÓ¦ÓóÌÐò£¬ËäÈ»Android¸ãÁËÆßÆß°Ë°ËµÄJAVAÖ®ÀàµÄ¶«Î÷£¬µ«ÊÇÔÚ±¾ÖÊÉÏ£¬Ëü»¹ÊÇÒ»¸öÍêÕûµÄLinux²Ù×÷ϵͳ£¬Ò²»¹Ã»ÓÐÅ£µ½Ê²Ã´Ó¦ÓóÌÐò¶¼ÊÇJAVAд¡£ËùÒÔ£¬MS(MediaService)¾ÍÊÇÒ»¸öºÍÆÕͨµÄC++Ó¦ÓóÌÐòÒ»ÑùµÄ¶«Î÷¡£


MediaServiceµÄÔ´ÂëÎļþÔÚ£ºframework\base\Media\MediaServer\Main_mediaserver.cppÖС£ÈÃÎÒÃÇ¿´¿´µ½µ×ÊǸöÊ²Ã´ÍæÒâ¶ù£¡


ÆäÖУ¬ÎÒÃÇÖ»·ÖÎöMediaPlayerService¡£


Õâô¶àÒÉÎÊ£¬¿´À´ÎÒÃÇÖ»ÓÐÒ»¸ö¸öº¯ÊýÉîÈë·ÖÎöÁË¡£²»¹ý£¬ÕâÀïÏȼòµ¥½éÉÜÏÂspÕâ¸ö¶«Î÷¡£


sp£¬¾¿¾¹ÊÇsmart pointer»¹ÊÇstrong pointerÄØ£¿ÆäʵÎÒºóÀ´·¢ÏÖ²»ÓÃÌ«¹Ø×¢Õâ¸ö£¬¾Í°ÑËüµ±×öÒ»¸öÆÕͨµÄÖ¸Õë¿´´ý£¬¼´sp======¡·IServiceManager*°É¡£spÊÇgoogle¸ã³öÀ´µÄΪÁË·½±ãC/C++³ÌÐòÔ±¹ÜÀíÖ¸ÕëµÄ·ÖÅäºÍÊͷŵÄÒ»Ì×·½·¨£¬ÀàËÆJAVAµÄʲôWeakReferenceÖ®ÀàµÄ¡£ÎÒ¸öÈ˾õµÃ£¬ÒªÊÇ×Ô¼ºÐ´³ÌÐòµÄ»°£¬²»ÓÃÕâ¸ö¶«Î÷Ò²³É¡£


ºÃÁË£¬ÒÔºóµÄ·ÖÎöÖУ¬sp¾Í¿´³ÉÊÇXXX*¾Í¿ÉÒÔÁË¡£


2.1 ProcessState


µÚÒ»¸öµ÷Óõĺ¯ÊýÊÇProcessState::self()£¬È»ºó¸³Öµ¸øÁËproc±äÁ¿£¬³ÌÐòÔËÐÐÍ꣬proc»á×Ô¶¯deleteÄÚ²¿µÄÄÚÈÝ£¬ËùÒÔ¾Í×Ô¶¯ÊÍ·ÅÁËÏÈǰ·ÖÅäµÄ×ÊÔ´¡£


ProcessStateλÖÃÔÚframework\base\libs\binder\ProcessState.cpp


ºÃÁË£¬µ½ÕâÀïProcess::self¾Í·ÖÎöÍêÁË£¬µ½µ×¸ÉʲôÁËÄØ£¿


´ò¿ª/dev/binderÉ豸£¬ÕâÑùµÄ»°¾ÍÏ൱ÓÚºÍÄÚºËbinder»úÖÆÓÐÁ˽»»¥µÄͨµÀ


Ó³Éäfdµ½Äڴ棬É豸µÄfd´«½øÈ¥ºó£¬¹À¼ÆÕâ¿éÄÚ´æÊǺÍbinderÉ豸¹²ÏíµÄ


½ÓÏÂÀ´£¬¾Íµ½µ÷ÓÃdefaultServiceManager()µØ·½ÁË¡£