±£»î£¬°´ÕÕÎÒÃǵÄÀí½â°üº¬Á½²¿·Ö£º
ÍøÂçÁ¬½Ó±£»î£ºÈçºÎ±£Ö¤ÏûÏ¢½ÓÊÕʵʱÐÔ¡£
½ø³Ì±£»î£º¾¡Á¿±£Ö¤Ó¦ÓõĽø³Ì²»±»Androidϵͳ»ØÊÕ¡£
1.0 ÍøÂçÁ¬½Ó±£»î
ÍøÂç±£»î£¬Òµ½çÖ÷ÒªÊÖ¶ÎÓУº
a. GCM
b. ¹«¹²µÄµÚÈý·½pushͨµÀ(ПëµÈ)
c. ×ÔÉí¸ú·þÎñÆ÷ͨ¹ýÂÖѯ£¬»òÕß³¤Á¬½Ó
¹ú²ú»úÆ÷´ó¶àȱ·¦GMS£¬ÔÚ¹úÄÚGCMÒ²²»Îȶ¨(ÐÄÌøÔÒò)£¬µÚÈý·½Í¨µÀÐèÒª¿¼Âǰ²È«ÎÊÌâºÍ³ÐÔØÄÜÁ¦£¬×îºó΢ÐÅÑ¡ÔñʹÓÃ×Ô¼ºµÄ³¤Á¬½Ó¡£¶ø¹úÍ⣬
GCM×÷Ϊ¸¨Öú£¬Î¢ÐÅÎÞ·¨½¨Á¢³¤Á¬½Óʱ£¬²ÅʹÓÃGCM¡£
֮ǰ¿´µ½´ó¼ÒÔÚÁĸ÷ÖÖJavaÍøÂç¿ò¼Ü£¬¶øÎ¢ÐÅʵ¼ÊÉ϶¼ÊÇûÓÃÉϵġ£ÔçÄêµÄ΢ÐÅ£¬Ö±½Óͨ¹ýJava socket
ʵÏÖ¡£Î¢ÐÅv5.0ºó£¬¿¼ÂǸ÷ϵͳƽ̨µÄͳһ£¬¿ªÊ¼Ê¹ÓÃ×ÔÑÐc++×é¼þ¡£
³¤Á¬½ÓʵÏÖ°üÀ¨¼¸¸öÒªËØ£º
a. ÍøÂçÇл»»òÕß³õʼ»¯Ê± server ip µÄ»ñÈ¡¡£
b. Á¬½ÓǰµÄ ipɸѡ£¬³ö´íºóip µÄÅׯú¡£
c. ά»¤³¤Á¬½ÓµÄÐÄÌø¡£
d. ·þÎñÆ÷ͨ¹ý³¤Á¬notify¡£
e. Ñ¡ÔñʹÓó¤Á¬Í¨µÀµÄÒµÎñ¡£
f. ¶Ï¿ªºóÖØÁ¬µÄ²ßÂÔ¡£
½ñÌìÖ÷ÌâÔÚ±£»î£¬ ÎÒÃÇÖØµãÌÖÂÛÐÄÌøºÍ notify »úÖÆ¡£
1.1 ÐÄÌø»úÖÆ
ÐÄÌøµÄÄ¿µÄºÜ¼òµ¥£ºÍ¨¹ý¶¨ÆÚµÄÊý¾Ý°ü£¬¶Ô¿¹NAT³¬Ê±¡£ÒÔÏÂÊDz¿·ÖµØÇøÍøÂçNAT
³¬Ê±Í³¼Æ£º

Éϱí˵Ã÷£º
a. GCMÎÞ·¨ÊÊÓ¦¹úÄÚ2G»·¾³(GCM 28·ÖÖÓÐÄÌø)¡£
b. ΪÁ˼æÈݹúÄÚÍøÂçÒªÇó£¬ÎÒÃÇÖÁÉÙ5·ÖÖÓÐÄÌøÒ»´Î¡£
Àϰ汾µÄ΢ÐÅÊÇ4.5·ÖÖÓ·¢ËÍÒ»´ÎÐÄÌø£¬ÔËÐÐÁ¼ºÃ¡£
ÐÄÌøµÄʵÏÖ£º

a. Á¬½ÓºóÖ÷¶¯µ½·þÎñÆ÷SyncÀȡһ´ÎÊý¾Ý£¬È·±£Á¬½Ó¹ý³ÌµÄÐÂÏûÏ¢¡£
b. ÐÄÌøÖÜÆÚµÄAlarm »½ÐѺó£¬Ò»°ãÓм¸ÃëµÄcpu ʱ¼ä£¬ÎÞÐèwakelock¡£
c. ÐÄÌøºóµÄAlarm·ÀÖ¹·¢Ëͳ¬Ê±£¬Èç·þÎñÆ÷Õý³£»Ø°ü£¬¸ÃAlarm È¡Ïû¡£
d. Èç¹û·þÎñÆ÷»Ø°ü£¬ÏµÍ³Í¨¹ýÍøÂ绽ÐÑ£¬ÎÞÐèwakelock¡£
Á÷³Ì»ùÓÚÁ½¸öÏµÍ³ÌØÐÔ£º
a. Alarm»½ÐѺó£¬×ã¹»cpuʱ¼ä·¢°ü¡£
b. ÍøÂç»Ø°ü¿É»½ÐÑ»úÆ÷¡£
ÌØ±ðÊÇbÏ¼ÙÈçAndroid·â¶Â¸ÃÌØÐÔ£¬ÄǾÍÖ»ÄÜÓÃGCMÁË¡£API level >= 23µÄdoze¾Í¹Ø±ÕËùÓеÄÍøÂ磬
alarmµÈ¡£µ«½øÈëdozeÌõ¼þ¿Á¿Ì£¬ÏÖÔÚ6.0ÆÕ¼°µÍ£¬ÖÁ½ñ΢ÐÅûÊÕµ½Ïà¹ØÍ¶Ëß¡£ÁíGoogleÒ²×îÖÕ¼ÓÈëREQUEST_IGNORE_BATTERY_OPTIMIZATIONSȨÏÞ¡£
1.2 ¶¯Ì¬ÐÄÌø
4.5minÐÄÌøÖÜÆÚÊÇÎȶ¨¿É¿¿µÄ£¬µ«ÎÞ·¨È·¶¨ÊÇ×î´óÖµ¡£Í¨¹ýÖն˵ij¢ÊÔ£¬¿ÉÒÔ»ñÈ¡µ½Ìض¨Óû§ÍøÂçÏ£¬ÐÄÌøµÄ×î´óÖµ¡£
ÒýÈë¸ÃÌØÐԵı³¾°£º
a. ÔËÓªÉ̵ÄÐÅÁî·ç±©
b. ÔËÓªÉÌÍøÂç»»´ú£¬NAT³¬Ê±Ç÷ÓÚÔö´ó
c. AlarmºÄµç£¬ÐÄÌøºÄÁ÷Á¿¡£
¶¯Ì¬ÐÄÌøÒýÈëÏÂÁÐ״̬£º
a. ǰ̨»îԾ̬£ºÁÁÆÁ£¬Î¢ÐÅÔÚǰ̨£¬ ÖÜÆÚminHeart (4.5min) £¬±£Ö¤ÌåÑé¡£
b. ºǫ́»îԾ̬£ºÎ¢ÐÅÔÚºǫ́10·ÖÖÓÄÚ£¬ÖÜÆÚminHeart £¬±£Ö¤ÌåÑé¡£
c. ×ÔÊÊÓ¦¼ÆËã̬£º²½ÔöÐÄÌø£¬³¢ÊÔ»ñÈ¡×î´óÐÄÌøÖÜÆÚ(sucHeart)¡£
d. ºǫ́Îȶ¨Ì¬£ºÍ¨¹ý×î´óÖÜÆÚ£¬±£³ÖÎȶ¨ÐÄÌø¡£
×ÔÊÊÓ¦¼ÆËã̬Á÷³Ì£º

ÔÚ×ÔÊÊӦ̬£º
a. curHeart³õʼֵΪminHeart £¬ ²½Ôö(heartStep)Ϊ1·ÖÖÓ¡£
b. curHeart ʧ°Ü5´Î£¬ Òâζ×ÅÕû¸ö×ÔÊÊӦ̬×î¶àÖ»ÓÐ5·ÖÖÓÎÞ·¨½ÓÊÕÏûÏ¢¡£
c. ½áÊøºó£¬Èç¹ûsucHeart > minHeart£¬»á¼õÈ¥10s(±Ü¿ªÁÙ½ç)£¬Îª¸ÃÍøÂçϵÄÎȶ¨ÖÜÆÚ¡£
d. ½øÈëÎȶ¨Ì¬Ê±£¬ÒªÇóÁ¬½ÓÁ¬ÐøÈý´Î³É¹¦minHeartÐÄÌøÖÜÆÚ£¬ÔÙʹÓÃsucHeart¡£
Îȶ¨Ì¬µÄÍ˳ö£º
sucHeart »á¶ÔÓ¦ÍøÂç´æ´¢ÏÂÀ´£¬ ÖØÆôºóÕý³£Ê¹Ó᣿¼Âǵ½ÍøÂçµÄ²»Îȶ¨£¬ÈçNAT³¬Ê±±äС£¬Óû§µØÀíλÖñ任¡£µ±·¢ÏÖsucHeart
Á¬Ðø5´Îʧ°Ü£¬ sucHeart ÖÃΪminHeart £¬ÖØÐ½øÈë×ÔÊÊӦ̬¡£
1.3 notify»úÖÆ
ÍøÂç±£»îµÄÒâÒåÔÚÓÚÏûϢʵʱ¡£Í¨¹ý³¤Á¬½Ó£¬Î¢ÐÅÓÐÏÂÁлúÖÆ±£Ö¤ÏûÏ¢µÄʵʱ¡£
Sync£º
ͨ¹ýSync CGIÖ±½ÓÇëÇóºǫ́Êý¾Ý¡£Sync ͨ¹ýºǫ́ºÍÖն˵ÄseqÖµ¶Ô±È£¬ÅжϸÃÏ·¢ÄÄЩÏûÏ¢¡£ÖÕ¶ËÕý³£´¦ÀíÏûÏ¢ºó£¬seq¸üÐÂΪ×îÐÂÖµ¡£
Sync µÄÖ÷Òª³¡¾°£º
a. ³¤Á¬ÎÞ·¨½¨Á¢Ê±£¬Í¨¹ýSync ¶¨ÆÚÂÖѯ
b. ΢ÐÅÇе½Ç°Ì¨Ê±£¬´¥·¢Sync(±£Ãü»úÖÆ)
c. ³¤Á¬½¨Á¢Íê³É£¬Á¢¼´´¥·¢Sync£¬·ÀÖ¹Á¬½Ó¹ý³Ì©ÏûÏ¢
d. ½ÓÊÕµ½Notify »òÕß gcm ºó£¬ÖÕ¶Ë´¥·¢Sync ½ÓÊÕÏûÏ¢.
Notify£º
ÀàËÆÓÚGCM¡£Í¨¹ý³¤Á¬½Ó£¬ºǫ́·¢³ö½ö´øseqµÄС°ü£¬Öն˸ù¾Ýseq¾ö¶¨ÊÇ·ñ´¥·¢SyncÀÈ¡ÏûÏ¢¡£
NotifyData£º
ÔÚ³¤Á¬Îȶ¨£¬ Notify»úÖÆÕý³£µÄÇé¿öÏÂ(±£Ö¤seqµÄͬ²½)¡£ºǫֱ́½ÓÍÆËÍÏûÏ¢ÄÚÈÝ£¬½ÚÊ¡1¸öRTT
(Sync) ÏûÏ¢½ÓÊÕʱ¼ä¡£ÖÕ¶ËÊÕµ½ÄÚÈݺ󣬴øÉÏseq»ØÓ¦NotifyAck£¬È·Èϳɹ¦¡£ÕâÀï»á³öÏÖNotifyºÍNotifyData״̬»¥ÏàÇл»µÄÇé¿ö£º
ÈçNotifyData ºó£¬·þÎñÆ÷ÔÚûÊÕµ½NotifyAck£¬¶øÓÐÐÂÏûÏ¢µÄÇé¿öÏ£¬»áÇл»»Øµ½Notify£¬Sync¿ÉÄÜÐèÒªÈßÓà֮ǰNotifyDataµÄÏûÏ¢¡£ÖÕ¶ËÒª±£Ö¤´®Ðд¦ÀíNotifyDataºÍSync
£¬·ñÔòseq¿ÉÄÜ»ØÍË¡£
GCM£º
Ö»Òª»úÆ÷ÉÏÓÐGMS £¬Æô¶¯Ê±¾Í³¢ÊÔ×¢²áGCM£¬²¢Í¨Öªºǫ́¡£·þÎñÆ÷»á¸ù¾ÝÖÕ¶ËÊÇ·ñ±£³Ö³¤Á¬£¬¾ö¶¨ÊÇ·ñÓÉGCM֪ͨ¡£GCMÖ÷ÒªÕë¶Ô¹úÍâ±È½Ï¸´ÔÓµÄÍøÂç»·¾³¡£
2.0 ½ø³Ì±£»î
ÔÚAndroidϵͳÀ½ø³Ì±»É±µÄÔÒòͨ³£ÎªÒÔϼ¸¸ö·½Ã棺
a. Ó¦ÓÃCrash
b. ϵͳ»ØÊÕÄÚ´æ
c. Óû§´¥·¢
d. µÚÈý·½rootȨÏÞapp.
ÔÒòa¿ÉÒÔµ¥¶À×÷Ϊһ¸ö¿ÎÌâÑо¿¡£ÔÒòc¡¢dĿǰÔÚ΢ÐÅÉÏûÓÐÌØÊâ´¦Àí¡£ÕâÀïÌÖÂ۵ľÍÊÇÈçºÎÓ¦¶ÔAndroid
Low Memory Killer¡£
ÏÂÃæ·ÖÏí¼¸¸ö΢Ðű£»îµÄ·½·¨£º
2.1 ½ø³Ì²ð·Ö

ÉÏͼ±íÊöµÄÊÇ΢ÐÅÖ÷ÒªµÄ¼¸¸ö½ø³Ì£º
a. pushÖ÷ÒªÓÃÓÚÍøÂç½»»¥£¬Ã»ÓÐUI
b. worker¾ÍÊÇÓû§¿´µ½µÄÖ÷ÒªUI
c. toolsÖ÷Òª°üº¬galleryºÍwebview
²ð·ÖÍøÂç½ø³Ì£¬È·Êµ¾ÍÊÇΪÁ˼õÉÙ½ø³Ì»ØÊÕ´øÀ´µÄÍøÂç¶Ï¿ª¡£

¿ÉÒÔ¿´µ½pushµÄÄÚ´æÒªÔ¶Ô¶Ð¡ÓÚworker¡£¶øÇÒpushµÄ¹¤×÷ÐÔÖÊÎȶ¨£¬ÄÚ´æÔö³¤»á·Ç³£ÉÙ¡£ÕâÑù¾Í¿ÉÒÔ±£Ö¤£¬¾¡Á¿µÄ¼õÉÙpush
±»É±µÄ¿ÉÄÜ¡£
ÕâÀïÓиö˼·£¬µ«ÏÞÖÆ±È½Ï¶à£¬Ò²Å×שÒýÓñ¡£Æô¶¯Ò»¸ö´¿C/C++ µÄ½ø³Ì£¬Ã»ÓÐJava run time
£¬ÄÚ´æÊ¹Óü«µÍ¡£
ÕâÖÖ×ö·¨ÏÞÖÆºÜÃ÷ÏÔ£¬È磺ûÓÐJava run time £¬ËùÒÔÎÞ·¨Ê¹ÓÃAndroidϵͳ½Ó¿Ú¡£È±·¦È¨ÏÞ£¬Ò²ÎÞ·¨Ê¹Óø÷ÖÖshellÃüÁî²Ù×÷(Èçam)¡£µ«¿ÉÒÔ¿¼ÂÇÒ»ÏÂÓÃ;£º¸ßÇ¿¶ÈÔËËã£¬ÍøÂçÁ¬½Ó£¬ÐÄÌøÎ¬³ÖµÈ¡£±ÈÈçShadowsocks-android¾ÍÈç´Ë£¬Í¨¹ý´¿cÃüÁîÐнø³Ì£¬Î¬»¤×Åsocks5´úÀí
(Android MÔËÐÐÕý³£)¡£
tools½ø³ÌµÄ²ð·ÖҲͬÑùÊÇÄÚ´æµÄÔÒò£º
a. Àϰ汾µÄwebview ÊÇÓÐÄÚ´æÐ¹Â©µÄ
b. Gallery´óÁ¿ËõÂÔͼµ¼ÖÂÄÚ´æÊ¹Óôó
΢ÐÅÔÚ½øÈëºǫ́ºó£¬»áÖ÷¶¯°Ñtools½ø³Ìkillµô¡£
2.2 ¼°Ê±ÀÆð
ϵͳ»ØÊÕ²»¿É±ÜÃ⣬¼°Ê±ÖØÐÂÀÆðµÄÊÖ¶ÎÖ÷ÒªÒÀÀµÏµÍ³ÌØÐÔ¡£´ÓÉÏͼ¿´µ½£¬ pushÓÐAlarmReceiver£¬
ConnectReceiver£¬BootReceiver¡£ÕâЩreceiver ¶¼¿ÉÒÔÔÚpush±»É±ºó£¬ÖØÐÂÀÆð¡£ÌرðAlarmReceiver
£¬½áºÏÐÄÌøÂß¼£¬Î¢Ðű»É±ºó£¬ÖØÐÂÀÆð×î¶àÒ»¸öÐÄÌøÖÜÆÚ¡£
¶ø¶ÔÓÚworker£¬³ýÁËÓû§UI²Ù×÷Æô¶¯¡£ÔÚ½ÓÊÕÏûÏ¢£¬»òÕßÍøÂçÇл»µÈʼþ£¬ pushÒ²»áͨ¹ýLocalBroadcast£¬ÖØÐÂÀÆðworker¡£ÕâÖÖÀÆðµÄworker
£¬´ó²¿·Ö³õʼ»¯ÒѾÍê³É£¬Ò²ÄÜ´ó´óÌá¸ßÓû§µã»÷΢Ðŵįô¶¯ËÙ¶È¡£
ÀúÊ·ÔÒò£¬ÎÒÃÇÔÚpushºÍworkerͨÐÅʹÓÃBroadcastºÍAIDL¡£Êµ¼ÊÉÏ£¬ÎÒÒ»Ö±²»Ï²»¶ÕâÀïµÄʵÏÖ£¬AIDL´úÂëÈßÓà¶à£¬
broadcastЧÂʵ͡£»¶Ó´ó¼Ò·ÖÏí¸üºÃµÄ˼·»òÕß·½·¨¡£
2.3 ½ø³ÌÓÅÏȼ¶
Low Memory Killer ¾ö¶¨ÊÇ·ñɱ½ø³Ì³ýÁËÄÚ´æ´óС£¬»¹Óнø³ÌÓÅÏȼ¶£º

ÉϱíµÄÊý×Ö¿ÉÄÜÔÚ²»Í¬ÏµÍ³»áÓÐÒ»¶¨µÄ³öÈ룬µ«Ã÷È·µÄÊÇ£¬ÊýֵԽС£¬ÓÅÏȼ¶Ô½¸ß¡£¶ÔÓÚÓÅÏȼ¶ÏàͬµÄ½ø³Ì£¬×ÜÊÇ»á°ÑÄÚ´æÕ¼ÓöàµÄÏÈkill¡£Ìá¸ß½ø³ÌÓÅÏȼ¶ÊDZ£»îµÄ×îºÃÊֶΡ£
Õý³£Çé¿öÏÂ΢ÐŵÄoom_adj£º

¶ø±»Ìá¸ßÓÅÏȼ¶ºó£º

´Óͳ¼ÆÉϱ¨¿´£¬Ìá¸ßºóµÄЧ¹û¼«¼Ñ¡£
ÔÀí£ºAndroid µÄǰ̨service»úÖÆ¡£µ«¸Ã»úÖÆµÄȱÏÝÊÇ֪ͨÀ¸±£ÁôÁËͼ±ê¡£
¶ÔÓÚ API level < 18 £ºµ÷ÓÃstartForeground(ID£¬ new Notification())£¬·¢ËͿյÄNotification
£¬Í¼±êÔò²»»áÏÔʾ¡£
¶ÔÓÚ API level >= 18£ºÔÚÐèÒªÌáÓÅÏȼ¶µÄservice AÆô¶¯Ò»¸öInnerService£¬Á½¸ö·þÎñͬʱstartForeground£¬ÇÒ°ó¶¨Í¬ÑùµÄ
ID¡£Stop µôInnerService £¬ÕâÑù֪ͨÀ¸Í¼±ê¼´±»ÒƳý¡£
Õâ·½°¸Êµ¼ÊÀûÓÃÁËAndroidǰ̨serviceµÄ©¶´¡£Î¢ÐÅÔÚÆÀ¹ÀÁ˹úÄÚ²»ÉÙappÒѾʹÓú󣬲ŽøÐÐÁ˲¿Êð¡£ÆäʵĿ±êÊÇÈôó¼ÒվͬһÆðÅÜÏßÉÏ£¬ÄÄÌìgoogle
°Ñ©¶´¶ÂÁË£¬Ð§¹ûÒ²ÊÇÒ»ÑùµÄ¡£
|