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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Androidƽ̨Öнø³ÌÓëÏ̵߳Ļù±¾ÖªÊ¶
 
 À´Ô´£ºITeye ·¢²¼ÓÚ£º 2016-12-8
  1417  次浏览      27
 

1.Android½ø³Ì»ù±¾ÖªÊ¶£º

ÎÒÃÇÏÈÀ´Á˽âÏÂAndroidÖеĽø³Ì»ù±¾ÖªÊ¶¡£

µ±Ò»¸ö³ÌÐòµÚÒ»´ÎÆô¶¯µÄʱºò£¬Android»áÆô¶¯Ò»¸öLINUX½ø³ÌºÍÒ»¸öÖ÷Ï̡߳£Ä¬ÈϵÄÇé¿öÏ£¬ËùÓиóÌÐòµÄ×é¼þ¶¼½«Ôڸýø³ÌºÍÏß³ÌÖÐÔËÐС£ ͬʱ£¬Android»áΪÿ¸öÓ¦ÓóÌÐò·ÖÅäÒ»¸öµ¥¶ÀµÄLINUXÓû§¡£Android»á¾¡Á¿±£ÁôÒ»¸öÕýÔÚÔËÐнø³Ì£¬Ö»ÔÚÄÚ´æ×ÊÔ´³öÏÖ²»×ã ʱ£¬Android»á³¢ÊÔֹͣһЩ½ø³Ì´Ó¶øÊÍ·Å×ã¹»µÄ×ÊÔ´¸øÆäËûеĽø³ÌʹÓ㬠ҲÄܱ£Ö¤Óû§ÕýÔÚ·ÃÎʵĵ±Ç°½ø³ÌÓÐ×ã¹»µÄ×ÊÔ´È¥¼°Ê±µØÏìÓ¦Óû§µÄʼþ¡£

Android»á¸ù¾Ý½ø³ÌÖÐÔËÐеÄ×é¼þÀà±ðÒÔ¼°×é¼þµÄ״̬À´Åжϸýø³ÌµÄÖØÒªÐÔ£¬Android»áÊ×ÏÈÍ£Ö¹ÄÇЩ²»ÖØÒªµÄ½ø³Ì¡£°´ÕÕÖØÒªÐԴӸߵ½µÍÒ»¹²ÓÐÎå¸ö¼¶±ð£º

ǰ̨½ø³Ì

ǰ̨½ø³ÌÊÇÓû§µ±Ç°ÕýÔÚʹÓõĽø³Ì¡£Ö»ÓÐһЩǰ̨½ø³Ì¿ÉÒÔÔÚÈκÎʱºò¶¼´æÔÚ¡£ËûÃÇÊÇ×îºóÒ»¸ö±»½áÊøµÄ£¬µ±ÄÚ´æµÍµ½¸ù±¾Á¬ËûÃǶ¼²»ÄÜÔËÐеÄʱºò¡£Ò»°ãÀ´Ëµ£¬ ÔÚÕâÖÖÇé¿öÏ£¬É豸»á½øÐÐÄÚ´æµ÷¶È£¬ÖÐֹһЩǰ̨½ø³ÌÀ´±£³Ö¶ÔÓû§½»»¥µÄÏìÓ¦¡£

¿É¼û½ø³Ì

¿É¼û½ø³Ì²»°üº¬Ç°Ì¨µÄ×é¼þµ«ÊÇ»áÔÚÆÁÄ»ÉÏÏÔʾһ¸ö¿É¼ûµÄ½ø³ÌÊǵÄÖØÒª³Ì¶ÈºÜ¸ß£¬³ý·Çǰ̨½ø³ÌÐèÒª»ñÈ¡ËüµÄ×ÊÔ´£¬²»È»²»»á±»ÖÐÖ¹¡£

·þÎñ½ø³Ì

ÔËÐÐ×ÅÒ»¸öͨ¹ýstartService() ·½·¨Æô¶¯µÄservice£¬Õâ¸öservice²»ÊôÓÚÉÏÃæÌáµ½µÄ2ÖÖ¸ü¸ßÖØÒªÐԵġ£serviceËùÔڵĽø³ÌËäÈ»¶ÔÓû§²»ÊÇÖ±½Ó¿É¼ûµÄ£¬µ«ÊÇËûÃÇÖ´ÐÐÁËÓà »§·Ç³£¹Ø×¢µÄÈÎÎñ£¨±ÈÈç²¥·Åmp3£¬´ÓÍøÂçÏÂÔØÊý¾Ý£©¡£Ö»ÒªÇ°Ì¨½ø³ÌºÍ¿É¼û½ø³ÌÓÐ×ã¹»µÄÄڴ棬ϵͳ²»»á»ØÊÕËûÃÇ¡£

ºǫ́½ø³Ì

ÔËÐÐ×ÅÒ»¸ö¶ÔÓû§²»¿É¼ûµÄactivity£¨µ÷Óùý onStop() ·½·¨).ÕâЩ½ø³Ì¶ÔÓû§ÌåÑéûÓÐÖ±½ÓµÄÓ°Ï죬¿ÉÒÔÔÚ·þÎñ½ø³Ì¡¢¿É¼û½ø³Ì¡¢Ç°Ì¨½ø ³ÌÐèÒªÄÚ´æµÄʱºò»ØÊÕ¡£Í¨³££¬ÏµÍ³ÖлáÓкܶ಻¿É¼û½ø³ÌÔÚÔËÐУ¬ËûÃDZ»±£´æÔÚLRU (least recently used) ÁбíÖУ¬ÒÔ±ãÄÚ´æ²»×ãµÄʱºò±»µÚһʱ¼ä»ØÊÕ¡£Èç¹ûÒ»¸öactivityÕý È·µÄÖ´ÐÐÁËËüµÄÉúÃüÖÜÆÚ£¬¹Ø±ÕÕâ¸ö½ø³Ì¶ÔÓÚÓû§ÌåÑéûÓÐÌ«´óµÄÓ°Ïì¡£

¿Õ½ø³Ì

δÔËÐÐÈκγÌÐò×é¼þ¡£ÔËÐÐÕâЩ½ø³ÌµÄΨһԭÒòÊÇ×÷Ϊһ¸ö»º´æ£¬Ëõ¶ÌÏ´γÌÐòÐèÒªÖØÐÂʹÓÃµÄÆô¶¯Ê±¼ä¡£ÏµÍ³¾­³£ÖÐÖ¹ÕâЩ½ø³Ì£¬ÕâÑù¿ÉÒÔµ÷½Ú³ÌÐò»º´æºÍϵͳ»º´æµÄƽºâ¡£

Android ¶Ô½ø³ÌµÄÖØÒªÐÔÆÀ¼¶µÄʱºò£¬Ñ¡È¡Ëü×î¸ßµÄ¼¶±ð¡£ÁíÍ⣬µ±±»ÁíÍâµÄÒ»¸ö½ø³ÌÒÀÀµµÄʱºò£¬Ä³¸ö½ø³ÌµÄ¼¶±ð¿ÉÄÜ»áÔö¸ß¡£Ò»¸öΪÆäËû½ø³Ì·þÎñµÄ½ø³ÌÓÀÔ¶²»»á±È±»·þ ÎñµÄ½ø³ÌÖØÒª¼¶µÍ¡£ÒòΪ·þÎñ½ø³Ì±Èºǫ́activity½ø³ÌÖØÒª¼¶¸ß£¬Òò´ËÒ»¸öÒª½øÐкÄʱ¹¤×÷µÄactivity×îºÃÆô¶¯Ò»¸öserviceÀ´×öÕâ¸ö¹¤ ×÷£¬¶ø²»ÊÇ¿ªÆôÒ»¸ö×Ó½ø³Ì¨D¨DÌØ±ðÊÇÕâ¸ö²Ù×÷ÐèÒªµÄʱ¼ä±Èactivity´æÔÚµÄʱ¼ä»¹Òª³¤µÄʱºò¡£ÀýÈ磬ÔÚºǫ́²¥·ÅÒôÀÖ£¬ÏòÍøÉÏÉÏ´«ÉãÏñÍ·Åĵ½µÄͼƬ£¬ ʹÓÃservice¿ÉÒÔʹ½ø³Ì×îÉÙ»ñÈ¡µ½¡°·þÎñ½ø³Ì¡±¼¶±ðµÄÖØÒª¼¶£¬¶ø²»Óÿ¼ÂÇactivityĿǰÊÇʲô״̬¡£broadcast receivers×ö·ÑʱµÄ¹¤×÷µÄʱºò£¬Ò²Ó¦¸ÃÆôÓÃÒ»¸ö·þÎñ¶ø²»ÊÇ¿ªÒ»¸öÏ̡߳£

2. µ¥Ïß³ÌÄ£ÐÍ

µ±Ò»¸ö³ÌÐòµÚÒ»´ÎÆô¶¯Ê±£¬Android»áͬʱÆô¶¯Ò»¸ö¶ÔÓ¦µÄÖ÷Ị̈߳¨Main Thread£©£¬Ö÷Ïß³ÌÖ÷Òª¸ºÔð´¦ÀíÓëUIÏà¹ØµÄʼþ£¬ÈçÓû§µÄ°´¼üʼþ£¬Óû§½Ó´¥ÆÁÄ»µÄʼþÒÔ¼°ÆÁÄ»»æÍ¼Ê¼þ£¬²¢°ÑÏà¹ØµÄʼþ·Ö·¢µ½¶ÔÓ¦µÄ×é¼þ½øÐд¦ Àí¡£ËùÒÔÖ÷Ïß³Ìͨ³£ÓÖ±»½Ð×öUIÏ̡߳£

ÔÚ¿ª·¢AndroidÓ¦ÓÃʱ±ØÐë×ñÊØµ¥Ïß³ÌÄ£Ð͵ÄÔ­Ôò£º Android UI²Ù×÷²¢²»ÊÇḬ̈߳²È«µÄ²¢ÇÒÕâЩ²Ù×÷±ØÐëÔÚUIÏß³ÌÖÐÖ´ÐС£

2.1 ×ÓÏ̸߳üÐÂUI AndroidµÄUIÊǵ¥Ïß³Ì(Single-threaded)µÄ¡£

ΪÁ˱ÜÃâÍÏסGUI£¬Ò»Ð©½Ï·ÑʱµÄ¶ÔÏóÓ¦¸Ã½»¸ø¶ÀÁ¢µÄÏß³ÌÈ¥Ö´ÐС£Èç¹ûÄ»ºóµÄÏß³ÌÀ´Ö´ÐÐUI¶ÔÏó£¬Android¾Í»á·¢³ö´íÎóѶϢ CalledFromWrongThreadException¡£ÒÔºóÓöµ½ÕâÑùµÄÒì³£Å׳öʱ¾ÍÒªÖªµÀÔõô»ØÊÂÁË£¡

2.2 Message Queue

ÔÚµ¥Ïß³ÌÄ£ÐÍÏ£¬ÎªÁ˽â¾öÀàËÆµÄÎÊÌ⣬AndroidÉè¼ÆÁËÒ»¸öMessage Queue(ÏûÏ¢¶ÓÁÐ)£¬ Ï̼߳ä¿ÉÒÔͨ¹ý¸ÃMessage Queue²¢½áºÏHandlerºÍLooper×é¼þ½øÐÐÐÅÏ¢½»»»¡£ÏÂÃæ½«¶ÔËüÃǽøÐзֱð½éÉÜ£º

2.2.1. Message MessageÏûÏ¢

Àí½âΪÏ̼߳佻Á÷µÄÐÅÏ¢£¬´¦ÀíÊý¾Ýºǫ́Ïß³ÌÐèÒª¸üÐÂUI£¬Ôò·¢ËÍMessageÄÚº¬Ò»Ð©Êý¾Ý¸øUIÏ̡߳£

2.2.2. Handler Handler´¦ÀíÕß

ÊÇMessageµÄÖ÷Òª´¦ÀíÕߣ¬¸ºÔðMessageµÄ·¢ËÍ£¬MessageÄÚÈݵÄÖ´Ðд¦Àí¡£ºǫ́Ï߳̾ÍÊÇͨ¹ý´«½øÀ´µÄHandler¶ÔÏóÒýÓÃÀ´ sendMessage(Message)¡£¶øÊ¹ÓÃHandler£¬ÐèÒªimplement ¸ÃÀàµÄ handleMessage(Message) ·½·¨£¬ËüÊÇ´¦ÀíÕâЩMessageµÄ²Ù×÷ÄÚÈÝ£¬ÀýÈçUpdate UI¡£Í¨³£ÐèÒª×ÓÀ໯HandlerÀ´ÊµÏÖhandleMessage·½·¨¡£

2.2.3. Message Queue

Message QueueÏûÏ¢¶ÓÁÐ ÓÃÀ´´æ·Åͨ¹ýHandler·¢²¼µÄÏûÏ¢£¬°´ÕÕÏȽøÏȳöÖ´ÐС£ ÿ¸ömessage queue¶¼»áÓÐÒ»¸ö¶ÔÓ¦µÄHandler¡£Handler»áÏòmessage queueͨ¹ýÁ½ÖÖ·½·¨·¢ËÍÏûÏ¢£ºsendMessage»òpost¡£ÕâÁ½ÖÖÏûÏ¢¶¼»á²åÔÚmessage queue¶Óβ²¢°´ÏȽøÏȳöÖ´ÐС£µ«Í¨¹ýÕâÁ½ÖÖ·½·¨·¢Ë͵ÄÏûÏ¢Ö´Ðеķ½Ê½ÂÔÓв»Í¬£ºÍ¨¹ýsendMessage·¢Ë͵ÄÊÇÒ»¸ömessage¶ÔÏó,»á±» HandlerµÄhandleMessage()º¯Êý´¦Àí£»¶øÍ¨¹ýpost·½·¨·¢Ë͵ÄÊÇÒ»¸örunnable¶ÔÏó£¬Ôò»á×Ô¼ºÖ´ÐС£

2.2.4. Looper

LooperÊÇÿÌõÏß³ÌÀïµÄMessage QueueµÄ¹Ü¼Ò¡£ AndroidûÓÐGlobalµÄMessage Queue£¬¶øAndroid»á×Ô¶¯ÌæÖ÷Ïß³Ì(UIÏß³Ì)½¨Á¢Message Queue£¬µ«ÔÚ×ÓÏß³ÌÀﲢûÓн¨Á¢Message Queue¡£ËùÒÔµ÷ÓÃLooper.getMainLooper()µÃµ½µÄÖ÷Ï̵߳ÄLooper²»ÎªNULL£¬µ«µ÷ÓÃLooper.myLooper() µÃµ½µ±Ç°Ï̵߳ÄLooper¾ÍÓпÉÄÜΪNULL¡£

¶ÔÓÚ×ÓÏß³ÌʹÓÃLooper£¬API DocÌṩÁËÕýÈ·µÄʹÓ÷½·¨£º

Java´úÂë

package com.test;  

import android.os.Handler;
import android.os.Looper;
import android.os.Message;

class LooperThread extends Thread {

public Handler mHandler;

public void run() {

Looper.prepare(); // ´´½¨±¾Ï̵߳ÄLooper²¢´´½¨Ò»¸öMessageQueue

mHandler = new Handler() {

public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop(); // ¿ªÊ¼ÔËÐÐLooper,¼àÌýMessage Queue
}
}

Õâ¸öMessage»úÖÆµÄ´ó¸ÅÁ÷³Ì£º

1. ÔÚLooper.loop()·½·¨ÔËÐпªÊ¼ºó£¬Ñ­»·µØ°´ÕÕ½ÓÊÕ˳ÐòÈ¡³öMessage QueueÀïÃæµÄ·ÇNULLµÄMessage¡£

2. Ò»¿ªÊ¼Message QueueÀïÃæµÄMessage¶¼ÊÇNULLµÄ¡£µ±Handler.sendMessage(Message)µ½Message Queue£¬¸Ãº¯ÊýÀïÃæÉèÖÃÁËÄǸöMessage¶ÔÏóµÄtargetÊôÐÔÊǵ±Ç°µÄHandler¶ÔÏó¡£ËæºóLooperÈ¡³öÁËÄǸöMessage£¬Ôòµ÷Óà ¸ÃMessageµÄtargetÖ¸ÏòµÄHanderµÄdispatchMessageº¯Êý¶ÔMessage½øÐд¦Àí¡£

ÔÚdispatchMessage·½·¨ÀÈçºÎ´¦ÀíMessageÔòÓÉÓû§Ö¸¶¨£¬Èý¸öÅжϣ¬ÓÅÏȼ¶´Ó¸ßµ½µÍ£º

1) MessageÀïÃæµÄCallback£¬Ò»¸öʵÏÖÁËRunnable½Ó¿ÚµÄ¶ÔÏ󣬯äÖÐrunº¯Êý×ö´¦Àí¹¤×÷£»

2) HandlerÀïÃæµÄmCallbackÖ¸ÏòµÄÒ»¸öʵÏÖÁËCallback½Ó¿ÚµÄ¶ÔÏó£¬ÓÉÆähandleMessage½øÐд¦Àí£»

3) ´¦ÀíÏûÏ¢Handler¶ÔÏó¶ÔÓ¦µÄÀà¼Ì³Ð²¢ÊµÏÖÁËÆäÖÐhandleMessageº¯Êý£¬Í¨¹ýÕâ¸öʵÏÖµÄhandleMessageº¯Êý´¦ÀíÏûÏ¢¡£ Óɴ˿ɼû£¬ÎÒÃÇʵÏÖµÄhandleMessage·½·¨ÊÇÓÅÏȼ¶×îµÍµÄ£¡

3. Handler´¦ÀíÍê¸ÃMessage (update UI) ºó£¬LooperÔòÉèÖøÃMessageΪNULL£¬ÒﱋȯÊÕ£¡

3.AndroidÁíÍâÌṩÁËÒ»¸ö¹¤¾ßÀࣺAsyncTask¡£

ËüʹµÃUI threadµÄʹÓñäµÃÒì³£¼òµ¥¡£Ëüʹ´´½¨ÐèÒªÓëÓû§½çÃæ½»»¥µÄ³¤Ê±¼äÔËÐеÄÈÎÎñ±äµÃ¸ü¼òµ¥£¬²»ÐèÒª½èÖúÏ̺߳ÍHandler¼´¿ÉʵÏÖ¡£

1) ×ÓÀ໯AsyncTask

2) ʵÏÖAsyncTaskÖж¨ÒåµÄÏÂÃæÒ»¸ö»ò¼¸¸ö·½·¨

onPreExecute() ¿ªÊ¼Ö´ÐÐǰµÄ×¼±¸¹¤×÷£»

doInBackground(Params...) ¿ªÊ¼Ö´Ðкǫ́´¦Àí£¬¿ÉÒÔµ÷ÓÃpublishProgress·½·¨À´¸üÐÂʵʱµÄÈÎÎñ½ø¶È£»

onProgressUpdate(Progress...) ÔÚpublishProgress·½·¨±»µ÷Óúó£¬UI thread½«µ÷ÓÃÕâ¸ö·½·¨´Ó¶øÔÚ½çÃæÉÏչʾÈÎÎñµÄ½øÕ¹Çé¿ö£¬ÀýÈçͨ¹ýÒ»¸ö½ø¶ÈÌõ½øÐÐչʾ¡£

onPostExecute(Result) Ö´ÐÐÍê³ÉºóµÄ²Ù×÷£¬´«Ëͽá¹û¸øUI Ï̡߳£

Õâ4¸ö·½·¨¶¼²»ÄÜÊÖ¶¯µ÷Ó᣶øÇÒ³ýÁËdoInBackground(Params...)·½·¨£¬ÆäÓà3¸ö·½·¨¶¼ÊDZ»UIÏß³ÌËùµ÷Óõģ¬ËùÒÔÒªÇó£º

1) AsyncTaskµÄʵÀý±ØÐëÔÚUI threadÖд´½¨£»

2) AsyncTask.execute·½·¨±ØÐëÔÚUI threadÖе÷Óã»

ͬʱҪעÒ⣺¸ÃtaskÖ»Äܱ»Ö´ÐÐÒ»´Î£¬·ñÔò¶à´Îµ÷ÓÃʱ½«»á³öÏÖÒì³£¡£

ÔÚʹÓùý³ÌÖУ¬·¢ÏÖAsyncTaskµÄ¹¹Ô캯ÊýµÄ²ÎÊýÉèÖÃÐèÒª¿´Ã÷°×£º

AsyncTask<Params, Progress, Result> Params¶ÔÓ¦doInBackground(Params...)µÄ²ÎÊýÀàÐÍ¡£

¶ønew AsyncTask().execute(Params... params)£¬¾ÍÊÇ´«½øÀ´µÄParamsÊý¾Ý£¬Äã¿ÉÒÔexecute(data)À´´«ËÍÒ»¸öÊý¾Ý£¬»òÕßexecute(data1, data2, data3)ÕâÑù¶à¸öÊý¾Ý¡£

Progress¶ÔÓ¦onProgressUpdate(Progress...)µÄ²ÎÊýÀàÐÍ£» Result¶ÔÓ¦onPostExecute(Result)µÄ²ÎÊýÀàÐÍ¡£

µ±ÒÔÉϵIJÎÊýÀàÐͶ¼²»ÐèÒªÖ¸Ã÷ij¸öʱ£¬ÔòʹÓÃVoid£¬×¢Òâ²»ÊÇvoid¡£²»Ã÷°×µÄ¿ÉÒԲο¼ÉÏÃæµÄÀý×Ó£¬»òÕßAPI DocÀïÃæµÄÀý×Ó¡£

ÏÂÃæÊǹØÓÚAsyncTaskµÄʹÓÃʾÀý£º

Java´úÂë

((Button) findViewById(R.id.load_AsyncTask)).setOnClickListener(new View.OnClickListener(){   

@Override
public void onClick(View view) {
data = null;
data = new ArrayList<String>();
adapter = null;
//ÏÔʾProgressDialog·Åµ½AsyncTask.onPreExecute()Àï
//showDialog(PROGRESS_DIALOG);
new ProgressTask().execute(data);
}
});

private class ProgressTask extends AsyncTask<ArrayList<String>, Void, Integer> {

/* ¸Ã·½·¨½«ÔÚÖ´ÐÐʵ¼ÊµÄºǫ́²Ù×÷ǰ±»UI threadµ÷Ó᣿ÉÒÔÔڸ÷½·¨ÖÐ×öһЩ׼±¸¹¤×÷£¬ÈçÔÚ½çÃæÉÏÏÔʾһ¸ö½ø¶ÈÌõ¡£ */
@Override
protected void onPreExecute() {
// ÏÈÏÔʾProgressDialog
showDialog(PROGRESS_DIALOG);
}

/* Ö´ÐÐÄÇЩºÜºÄʱµÄºǫ́¼ÆË㹤×÷¡£¿ÉÒÔµ÷ÓÃpublishProgress·½·¨À´¸üÐÂʵʱµÄÈÎÎñ½ø¶È¡£ */
@Override
protected Integer doInBackground(ArrayList<String>... datas) {
ArrayList<String> data = datas[0];
for (int i=0; i<8; i++) {
data.add("ListItem");
}
return STATE_FINISH;
}

/*
* ÔÚdoInBackground Ö´ÐÐÍê³Éºó£¬onPostExecute ·½·¨½«±»UI threadµ÷Ó㬠ºǫ́µÄ¼ÆËã½á¹û½«Í¨¹ý¸Ã·½·¨´«µÝµ½UI
* thread.
*/
@Override
protected void onPostExecute(Integer result) {
int state = result.intValue();
switch(state){
case STATE_FINISH:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(), "¼ÓÔØÍê³É!", Toast.LENGTH_LONG).show();

adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, data );

setListAdapter(adapter);
break;

case STATE_ERROR:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(),"´¦Àí¹ý³Ì·¢Éú´íÎó!",Toast.LENGTH_LONG).show();

adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, data );

setListAdapter(adapter);
break;
default:

}
}

ÒÔÉÏÊÇ´ÓÍøÂç»ñÈ¡Êý¾Ý£¬¼ÓÔØµ½ListViewÖÐʾÀý¡£

4.AndroidÖÐÈçºÎ½áÊø½ø³Ì

4.1 Android ½áÊø½ø³Ì£¬¹Ø±Õ³ÌÐòµÄ·½·¨ ¼´²ÉÓÃÏÂÃæÕâ¸öÀà

Void android.app.ActivityManager.restartPackage(String packageName)
public void restartPackage (String packageName)
Since: API Level 3
Have the system perform a force stop of everything associated with the given application package. All processes that share its uid will be killed, all services it has running stopped, all activities removed, etc. In addition, a ACTION_PACKAGE_RESTARTED broadcast will be sent, so that any of its registered alarms can be stopped, notifications removed, etc. You must hold the permission RESTART_PACKAGES to be able to call this method. Parameters packageName The name of the package to be stopped.

ʹÓÃÕâ¸öÀàµÄ¾ßÌåÔ´´úÂë

final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
am.restartPackage(getPackageName());

¸´ÖÆ´úÂë

²»ÒªÍü¼ÇÁËÔÚÅäÖÃÎļþÖÐÉèÖÃȨÏÞ£º

<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

¸´ÖÆ´úÂë

½áÊø½ø³Ì»¹ÓÐ

4.2 android.os.Process.killProcess(pid) Ö»ÄÜÖÕÖ¹±¾³ÌÐòµÄ½ø³Ì£¬ÎÞ·¨ÖÕÖ¹ÆäËüµÄ

  public static final void killProcess (int pid)

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.

¾ßÌå´úÂëÈçÏ£º

 Process.killProcess(Process.myPid());

Process.killProcess(Process.myPid());

¸´ÖÆ´úÂë

public void finish ()
Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().

ÕâÊǽáÊøµ±Ç°activityµÄ·½·¨¡£ ÒªÖ÷¶¯µÄ½áÊøÒ»¸ö»î¶¯Activity£¬ÕâÀïÐèҪעÒâfinishÊǽáÊøµôÒ»¸öActivity£¬¶ø²»ÊÇÒ»¸ö½ø³Ì¡£Õâ¸ö·½·¨×îºó»áµ÷ÓÃActivityµÄ ÉúÃüÖÜÆÚº¯ÊýonDestroy·½·¨£¬½áÊøµ±Ç° µÄActivity£¬´ÓÈÎÎñÕ»Öе¯³öµ±Ç°µÄActivity£¬¼¤»îÏÂÒ»¸öActivity¡£µ±È»ÆäËûµÄfinishϵÁз½·¨£¬ÎÒÃDz»ÔÚÕâÀï×öÏêϸÌÖ ÂÛ¡£

4.3 System.exit(int code)

ÀýÈ磺 System.exit(0);

¸Ã·½·¨Ö»ÄÜÓÃÓÚ½áÊøµ±Ç°½ø³Ì×ÔÉí£¬ÔÚ³ÌÐòÓöµ½Òì³££¬ÎÞ·¨Õý³£Ö´ÐÐʱ£¬¿ÉÒÔ Í¨¹ýÕâ¸ö·½·¨Ç¿ÖÆÍ˳ö¡£

ÐèҪעÒâµÄÊÇ£º android.os.Process.killProcess(pid) ºÍ System.exit(int code) »áµ¼Ö½ø³Ì·ÇÕý³£Í˳ö£¬½ø³ÌÍ˳öʱ²»»áÈ¥Ö´ÐÐActivityµÄonPause¡¢onStopºÍonDestroy·½·¨£¬ÄÇô½ø³ÌºÜÓпÉÄÜ´í¹ýÁ˱£´æÊý¾ÝµÄ»ú»á¡£Òò´Ë£¬ÕâÁ½¸ö·½·¨×îºÃʹÓÃÔÚ³öÏÖÒì³£µÄʱºò£¡´ó¼ÒÐèҪעÒâÆäʹÓ÷½·¨¡£

4.4 ÔÚandroid2.2°æ±¾Ö®ºóÔò²»ÄÜÔÙʹÓÃrestartPackage()·½·¨£¬¶øÓ¦¸ÃʹÓÃkillBackgroundProcesses()·½·¨

manager.killBackgroundProcesses(getPackageName());

ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
manager.killBackgroundProcesses(getPackageName());

¸´ÖÆ´úÂë

1.//ÐèÒªÔÚxmlÖмÓÈëȨÏÞÉùÃ÷

2.<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

¸´ÖÆ´úÂë

ÁíÍ⣬ÔÚandroid2.2ÒÔºó£¬Èç¹û·þÎñÔÚondestroyÀï¼ÓÉÏÁËstart×Ô¼º£¬ÓÃkill backgroudprocessͨ³£ÎÞ·¨½áÊø×Ô¼º¡£

4.5»¹ÓÐÒ»ÖÖ×îз¢Ïֵķ½·¨£¬ÀûÓ÷´Éäµ÷ÓÃforceStopPackageÀ´½áÊø½ø³Ì

1.Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);

2.forceStopPackage.setAccessible(true);

3.forceStopPackage.invoke(am, yourpkgname);

¸´ÖÆ´úÂë

ÅäÖÃÎļþÖÐÐèÒªÌí¼Ó¶¨Òå

1. android:sharedUserId="android.uid.system" 

¸´ÖÆ´úÂë

ÁíÍâÐèÒªÔÙÔÚÅäÖÃÎļþÌí¼ÓȨÏÞ£º

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission> 

¸´ÖÆ´úÂë

²¢ÇÒ²ÉÓÃϵͳplatformÇ©Ãû ÒòΪÐèÒªÓÃFORCE_STOP_PACKAGESȨÏÞ£¬¸ÃȨÏÞÖ»¸³ÓèϵͳǩÃû¼¶³ÌÐò ¼´¿ÉʵÏÖÇ¿ÖÆÍ£Ö¹Ö¸¶¨³ÌÐò

4.6 »¹ÓÐÒ»ÖÖ·½·¨ ÀûÓÃlinuxµÄkill -9ÃüÁî

4.7 Í˳öµ½Ö÷ÆÁÄ»£¨ÊǶԵ±Ç°½ø³ÌµÄÒ»ÖÖ´¦Àí£©

Õâ¸ö·½·¨£¬Ò²ÊÇÍ˳öµ±Ç°½ø³ÌµÄÒ»¸ö·½·¨¡£Èç¹ûÎÒÃÇÔÚ½ø³ÌÖд´½¨Á˺ܶàµÄActivity£¬ µ«ÊÇÓÖ²»Ïë¹Ø±ÕʱȥÍ˳ö²»ÔÚÈÎÎñÕ»¶¥µÄActivity £¬ÄÇô¾Í¿ÉÒÔÖ±½ÓʹÓÃÕâ¸ö·½·¨ÁË¡£

¹¦ÄÜ£ºµ±°´Ï·µ»Ø¼üʱ£¬¾Í·µ»Øµ½Ö÷ÆÁÄ»£¬²¢´øÓвÎÊý FLAG_ACTIVITY_CLEAR_TOP £¬ »áÇåÀíµôµ±Ç°µÄ»î¶¯¡£

ÒÔÏÂÊǰ´Ï·µ»Ø¼üͬʱ²»Öظ´Ê±£¬·µ»Øµ½Ö÷ÆÁÄ»µÄʾÀý£º

Java´úÂë

package com.test.android;  

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;

/**
* Andriod°´·µ»Ø¼ü·µ»Øµ½Ö÷ÆÁĻʾÀý
*/
public class MyTestProjectActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// event.getRepeatCount()£º°´Ï·µ»Ø¼ü£¬Í¬Ê±Ã»ÓÐÖØ¸´
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
Intent home = new Intent(Intent.ACTION_MAIN);
home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
home.addCategory(Intent.CATEGORY_HOME);
startActivity(home);
}

return super.onKeyDown(keyCode, event);
}
}

   
1417 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ