ÿ¸ö Android ¿ª·¢Õß±ØÐëÖªµÀµÄÏûÏ¢»úÖÆÎÊÌâ×ܽá

µ¼Óï ¡¡¡¡Looper¡¡¡¡×÷Ó㺡¡¡¡¹ØÁªÆðThread¡¡¡¡Ñ­»·È¡³öÏûÏ¢¡¡¡¡1¡¢LooperÊÇ·ñ¿ÉÒÔÖ±½ÓʵÀý»¯?¡¡¡¡Looper¹¹Ôì·½·¨ÊÇ˽Óеģ¬ÆäÖÐ×öÁËÁ½¼þÊ¡¡¡¡´´½¨Ò»¸öMessageQueue¡¡¡¡µÃµ½ÓëÖ®¶ÔÓ¦µÄThread¡¡¡¡private Looper(bo
¡¡¡¡Looper

¡¡¡¡×÷Óãº

¡¡¡¡¹ØÁªÆðThread

¡¡¡¡Ñ­»·È¡³öÏûÏ¢

¡¡¡¡1¡¢LooperÊÇ·ñ¿ÉÒÔÖ±½ÓʵÀý»¯?

¡¡¡¡Looper¹¹Ôì·½·¨ÊÇ˽Óеģ¬ÆäÖÐ×öÁËÁ½¼þÊÂ

¡¡¡¡´´½¨Ò»¸öMessageQueue

¡¡¡¡µÃµ½ÓëÖ®¶ÔÓ¦µÄThread

¡¡¡¡private Looper(boolean quitAllowed) {

¡¡¡¡mQueue = new MessageQueue(quitAllowed);

¡¡¡¡mThread = Thread.currentThread();

¡¡¡¡}

¡¡¡¡2¡¢Ò»¸öÏß³ÌÄܶÔÓ¦¶à¸öLopper?

¡¡¡¡²»ÄÜ£¬Ò»¸öÏ̶߳ÔÓ¦Ò»¸öLooper¶ÔÏó£¬Í¨¹ýThreadLocal±£Ö¤Ò»¸öÏß³ÌÖ»ÓÐÒ»¸öLooperÓëÖ®¶ÔÓ¦£¬Èç¹û¶à´Îµ÷ÓÃLooper.prepare();Ôò»áÅ׳öÔËÐÐʱÒì³£¡£

¡¡¡¡private static void prepare(boolean quitAllowed) {

¡¡¡¡if (sThreadLocal.get() != null) { // ²é¿´ÊÇ·ñÓÐlooperÓ뵱ǰÏ̶߳ÔÓ¦

¡¡¡¡throw new RuntimeException("Only one Looper may be created per thread");

¡¡¡¡}

¡¡¡¡sThreadLocal.set(new Looper(quitAllowed));

¡¡¡¡}

¡¡¡¡3¡¢LooperÊÇÎÞÏÞÑ­»·£¬»á×èÈûÂð?

¡¡¡¡ÊÇ£¬µ±¿ªÆôÒ»¸öloopºóÊÇÒ»¸öËÀÑ­»·£¬´ÓMessageQueueÖÐÈ¡³öÏûÏ¢£¬´¦ÀíÏûÏ¢£¬µ«ÊÇÒ²ÓпÉÄÜÍ˳ö£¬ÔÚûÓÐÏûÏ¢ºóÍ˳öÑ­»·¡£

¡¡¡¡public static void loop() {

¡¡¡¡final Looper me = myLooper();

¡¡¡¡if (me == null) {

¡¡¡¡throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");

¡¡¡¡}

¡¡¡¡final MessageQueue queue = me.mQueue;

¡¡¡¡// ÂÔ

¡¡¡¡for (;;) {

¡¡¡¡Message msg = queue.next(); // might block

¡¡¡¡if (msg == null) { // µ±Ã»ÓÐÏûÏ¢µÄʱºò£¬Í˳ö

¡¡¡¡// No message indicates that the message queue is quitting.

¡¡¡¡return;

¡¡¡¡}

¡¡¡¡// ÂÔ

¡¡¡¡msg.target.dispatchMessage(msg);

¡¡¡¡}

¡¡¡¡4¡¢¿ÉÒÔÔٴε÷ÓÃLooper.prepareMainLooperÂð?

¡¡¡¡²»¿ÉÒÔ£¬Looper.prepareMainLooper×îÖÕÒ²Êǵ÷ÓÃprepare()£¬Í¬2.

¡¡¡¡public static void prepareMainLooper() {

¡¡¡¡prepare(false); // ´´½¨Ò»¸öLooper

¡¡¡¡synchronized (Looper.class) {

¡¡¡¡if (sMainLooper != null) {

¡¡¡¡throw new IllegalStateException("The main Looper has already been prepared.");

¡¡¡¡}

¡¡¡¡sMainLooper = myLooper();

¡¡¡¡}

¡¡¡¡}

¡¡¡¡5¡¢MainLooperʲôʱºò´´½¨µÄ?

¡¡¡¡MainLooperÊÇÆô¶¯Activity´´½¨ActivityThread(²¢²»ÊÇÒ»¸öThread)ʱºò´´½¨£¬ËùÒÔ²»Äܶà´Î´´½¨¡£

¡¡¡¡public static void main(String[] args) {

¡¡¡¡// ÂÔ

¡¡¡¡Process.setArgV0("");

¡¡¡¡Looper.prepareMainLooper();

¡¡¡¡// ÂÔ

¡¡¡¡ActivityThread thread = new ActivityThread();

¡¡¡¡thread.attach(false);

¡¡¡¡// ÂÔ

¡¡¡¡if (sMainThreadHandler == null) {

¡¡¡¡sMainThreadHandler = thread.getHandler();

¡¡¡¡}

¡¡¡¡// ÂÔ

¡¡¡¡Looper.loop();

¡¡¡¡throw new RuntimeException("Main thread loop unexpectedly exited");

¡¡¡¡}

¡¡¡¡}

¡¡¡¡Handler

¡¡¡¡×÷ÓÃ:

¡¡¡¡·¢ËÍÏûÏ¢µ½MessageQueue

¡¡¡¡´¦ÀíÏûÏ¢

¡¡¡¡1¡¢HandlerÈçºÎÓëLooper¡¢MessageQueue¹ØÁªÆðÀ´?

¡¡¡¡ÎÒÃÇÖªµÀÒ»¸öLooper¶ÔÓ¦Ò»¸öThread£¬Ò»¸öLooper°üº¬Ò»¸öMessageQueue¡£µ±ÎÒÃÇ´´½¨Handlerʱ¾Í»á´Óµ±Ç°Ïß³ÌÖÐÈ¡³öÓëÖ®¶ÔÓ¦µÄLooper£¬ÈúóÔÚ´ÓLooperÖÐÈ¡³öMessageQueue¡£

¡¡¡¡// 1¡¢×Ô¶¯»ñÈ¡

¡¡¡¡public Handler(Callback callback, boolean async) {

¡¡¡¡// ÂÔ

¡¡¡¡mLooper = Looper.myLooper(); // È¡³öµ±Ç°Ïß³ÌÖеÄLooper

¡¡¡¡if (mLooper == null) {

¡¡¡¡throw new RuntimeException(

¡¡¡¡"Can't create handler inside thread that has not called Looper.prepare()");

¡¡¡¡}

¡¡¡¡mQueue = mLooper.mQueue; // È¡³öMessageQueue

¡¡¡¡mCallback = callback;

¡¡¡¡mAsynchronous = async;

¡¡¡¡}

¡¡¡¡// 2¡¢´«µÝÒ»¸öLooper½øÀ´

¡¡¡¡public Handler(Looper looper, Callback callback, boolean async) {

¡¡¡¡mLooper = looper;

¡¡¡¡mQueue = looper.mQueue;

¡¡¡¡mCallback = callback;

¡¡¡¡mAsynchronous = async;

¡¡¡¡}

¡¡¡¡Message

¡¡¡¡µ¥ÏîÁ´±í½á¹¹¡£

¡¡¡¡×÷Óãº

¡¡¡¡Êý¾ÝµÄÔØÌå

¡¡¡¡1¡¢ÏûÏ¢ÈçºÎ¸´ÓõÄ?

¡¡¡¡´ÓÈ«¾ÖÏûÏ¢³Ø(Á´±í½á¹¹)ÖÐ

¡¡¡¡public static Message obtain() {

¡¡¡¡synchronized (sPoolSync) {

¡¡¡¡if (sPool != null) {

¡¡¡¡Message m = sPool;

¡¡¡¡sPool = m.next;

¡¡¡¡m.next = null;

¡¡¡¡m.flags = 0; // clear in-use flag

¡¡¡¡sPoolSize--;

¡¡¡¡return m;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return new Message();

¡¡¡¡}

¡¡¡¡2¡¢MessageΪʲôÄÜ´«µÝ?

¡¡¡¡AndroidÖÐÏëÒª´«µÝ¶ÔÏóҪôʵÏÖSerializableҪôParcelable£¬ÔÚÕâÀïÊÇʵÏÖÁËParcelable½Ó¿Ú¡£

¡¡¡¡public final class Message implements Parcelable {

¡¡¡¡// ÂÔ

¡¡¡¡}

¡¡¡¡3¡¢ÈçºÎÓëHandler¹ØÁª?

¡¡¡¡ÎÒÃÇÖªµÀÔÚÏûÏ¢´«»úÖÆÖÐHandler³äµ±×Å“¿ìµÝÔ±”µÄ½ÇÉ«£¬ÄÇôËûÓÖÊÇÈçºÎÓë“»õÎï”--Message·¢Éú¹ØϵÄØ?ʵ¼ÊÉÏMessageÓÐÒ»¸ö³ÉÔ±±äÁ¿targetËûµÄÀàÐÍÕýÊÇHandler£¬

¡¡¡¡/*package*/ Runnable callback;

¡¡¡¡public int arg1;

¡¡¡¡public int arg2;

¡¡¡¡public Object obj;

¡¡¡¡/*package*/ Handler target; // ¹Ø¼üµã

¡¡¡¡µ±ÎÒÃÇͨ¹ýHandlerÈ¥sendÒ»¸öMessageʱºò×îÖÕ¶¼»áΪtarget¸³ÖµÎªthis£¬¼´µ±Ç°µÄHandler¡£

¡¡¡¡private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {

¡¡¡¡msg.target = this; // ¸³ÖµÓï¾ä

¡¡¡¡if (mAsynchronous) {

¡¡¡¡msg.setAsynchronous(true);

¡¡¡¡}

¡¡¡¡return queue.enqueueMessage(msg, uptimeMillis);

¡¡¡¡}

¡¡¡¡ÁíΪÈç¹ûÊÇͨ¹ýMessage.Obtain(),»ñÈ¡µÄ¸´ÓÃMessageÒ²»áΪÆ丳ֵ¡£

¡¡¡¡¶à˵һ¾ä£¬Handler.obtainMessage()µ÷ÓõľÍÊÇMessage.Obtain()¡£

¡¡¡¡public final Message obtainMessage(){

¡¡¡¡return Message.obtain(this);

¡¡¡¡}

¡¡¡¡×ܽ᣺

¡¡¡¡Í¨¹ýһϵÁеİüº­¹Øϵ£¬×îÖÕLooper¡¢Handler¡¢Message¡¢MessageQueue¼´·¢Éú¹ØÁª£¬´Ó¶øÐγÉÒ»¸ö±ÕºÏ£¬¿ªÆôÏûϢѭ»·¡£

¡¡¡¡

\

 

¡¡¡¡À§»ó

¡¡¡¡×î½üÒ»Ö±ÔÚ¿´Õâ·½ÃæµÄ֪ʶ£¬µ«ÊÇÄÜÁ¦ÓÐÏÞ£¬»¹ÊÇÓв»ÉÙÀ§»ó£¬Èç¹ûÓдíÎ󣬻òÄãÀí½âÏÂÃæµÄÎÊÌâÇëÁªÏµÎÒfvaryu@qq.com,Ô¸Óë¾ý½»Á÷ѧϰ£¬Ð»Ð»

¡¡¡¡1¡¢MessageÖеÄsPool£¬ÄÄÀï³õʼ»¯µÄ?ΪʲôMessage.obtain()Öв»»áÅ×Òì³£?

¡¡¡¡2¡¢ActivityThread²¢²»ÊÇỊ̈߳¬ÎªÊ²Ã´¿ÉÒÔ´´½¨Ò»¸öLooper£¬Main Threadʲôʱºò´´½¨?

¡¡¡¡3¡¢ÎªÊ²Ã´ÐòÁл¯Á˵ĶÔÏó¾Í¿ÉÒÔ´«µÝ?ÓëBinderÓйØ?

¡¡¡¡4¡¢MessageQueue¶ÔÓ¦µÄÊÇNativeMessageQueue£¬¾ßÌåʵÏÖÐèҪѧϰ?

¡¡¡¡5¡¢Loop.loop()£¬»áÍ˳öÂð?Í˳öʱ»úÊÇʲô?Èç¹û»áÍ˳ö£¬ÄÇôÖ÷Ïß³ÌͬÑù»áÍ˳öÂð?

http://www.aseoe.com/ true ÿ¸ö Android ¿ª·¢Õß±ØÐëÖªµÀµÄÏûÏ¢»úÖÆÎÊÌâ×ܽá http://www.aseoe.com/show-17-848-1.html report <£¿php echo strlen($content) / 2; ?> ¡¡¡¡Looper¡¡¡¡×÷Ó㺡¡¡¡¹ØÁªÆðThread¡¡¡¡Ñ­»·È¡³öÏûÏ¢¡¡¡¡1¡¢LooperÊÇ·ñ¿ÉÒÔÖ±½ÓʵÀý»¯?¡¡¡¡Looper¹¹Ôì·½·¨ÊÇ˽Óеģ¬ÆäÖÐ×öÁËÁ½¼þÊ¡¡¡¡´´½¨Ò»¸öMessageQueue¡¡¡¡µÃµ½ÓëÖ®¶ÔÓ¦µÄThread¡¡¡¡private Looper(bo
TAG:Android ¿ª·¢Õß
±¾Õ¾»¶Ó­ÈκÎÐÎʽµÄתÔØ£¬µ«ÇëÎñ±Ø×¢Ã÷³ö´¦£¬×ðÖØËûÈËÀͶ¯³É¹û
תÔØÇë×¢Ã÷£º ÎÄÕÂתÔØ×Ô£º°®Ë¼×ÊÔ´Íø http://www.aseoe.com/show-17-848-1.html

[Ç°¶Ë²å¼þÍƼö] Plugin

1 2 3 4
  • jQueryʵÏÖÖð×ÖÖð¾äÏÔʾ²å¼þl-by-l.min.js
  • jQuery´ø·½Ïò¸ÐÖªµÄÊó±ê»¬¹ýͼƬ±ß¿òÌØЧ²å¼þ
  • jQuery HotKeys¼àÌý¼üÅÌ°´ÏÂʼþkeydown²å¼þ
  • ÏìӦʽÎÞÏÞÂÖ²¥jQueryÐýתľÂí²å¼þ
ÏìӦʽÎÞÏÞÂÖ²¥jQueryÐýתľÂí²å¼þ
webÇ°¶Ë¿ª·¢
°®Ë¼×ÊÔ´Íø Copyright 2012-2014 Www.Aseoe.Com All rights reserved.(½úICP±¸13001436ºÅ-1)