2011년 3월 24일 목요일

ipc] queue의 원형을 찾아서.

큐 원형은 messageQueue.java로 보임.

    /*package*/ ActivityThread mMainThread;

ActivityThread.java가 있음.
getMainLooper() 했을 때 ActivityThread를 받아오는 것 같음.
camera.java에 보면
373 라인에  private void addIdleHandler() {
        MessageQueue queue = getMainLooper().myQueue();
가 있음.
메인 쓰레드의 queue 정보를 가지고 오는 것 같음.
   public final void addIdleHandler(IdleHandler handler) {
        if (handler == null) {
            throw new NullPointerException("Can't add a null IdleHandler");
        }
        synchronized (this) {
            mIdleHandlers.add(handler);
        }
    }
다른 곳에서 찾은 messageQueue의 흔적들...
-------------------------
    public static final MessageQueue myQueue() {
        return myLooper().mQueue;
    }


-------------------------
public class DeferredHandler {
    private LinkedList<Runnable> mQueue = new LinkedList();
    private MessageQueue mMessageQueue = Looper.myQueue();
    private Impl mHandler = new Impl();

-------------------------
   public boolean sendMessageAtTime(Message msg, long uptimeMillis)
    {
        boolean sent = false;
        MessageQueue queue = mQueue;
        if (queue != null) {
            msg.target = this;
            sent = queue.enqueueMessage(msg, uptimeMillis);
        }
        else {
            RuntimeException e = new RuntimeException(
                this + " sendMessageAtTime() called with no mQueue");
            Log.w("Looper", e.getMessage(), e);
        }
        return sent;
    }

-------------------------
   public final boolean sendMessageAtFrontOfQueue(Message msg)
    {
        boolean sent = false;
        MessageQueue queue = mQueue;
        if (queue != null) {
            msg.target = this;
            sent = queue.enqueueMessage(msg, 0);
        }
        else {
            RuntimeException e = new RuntimeException(
                this + " sendMessageAtTime() called with no mQueue");
            Log.w("Looper", e.getMessage(), e);
        }
        return sent;
    }
-------------------------
  final MessageQueue mQueue;
-------------------------
        public void startBindingAppWidgetsWhenIdle() {
            // Ask for notification when message queue becomes idle
            final MessageQueue messageQueue = Looper.myQueue();
            messageQueue.addIdleHandler(new MessageQueue.IdleHandler() {
                public boolean queueIdle() {
                    // Queue is idle, so start binding items
                    startBindingAppWidgets();
                    return false;
                }
            });
        }
-------------------------
    private MessageQueue mMessageQueue = null;
-------------------------
 mQueue = mLooper.mQueue;
-------------------------
     mLooper = Looper.myLooper();
-------------------------
 public static final MessageQueue myQueue() {
        return myLooper().mQueue;
    }

-------------------------
  public static final Looper myLooper() {
        return (Looper)sThreadLocal.get();
    }

-----------------------
   private static final ThreadLocal sThreadLocal = new ThreadLocal();

-----------------------------
ThreadLocal을 부르는 녀석들을 검색해서 엑셀로 하나만 뽑아보면
ActivityManagerService.java
ActivityThread.java
CDDownloadHttpClient.java
DateUtils.java
debug.h
execution.h
Executors.java
FocusFinder.java
IIORegistry.java
InheritableThreadLocal.java
LastControl.java
LogRecord.java
LogRecordTest.java
Looper.java
Platform.java
ReentrantReadWriteLock.java
regexp-stack.h
sitemap.txt
SQLiteContentProvider.java
Thread.java
ThreadLocal.java
ThreadLocalCache.java
ThreadLocalTest.java
View.java
ViewRoot.java
XMLReaderManager.java
에서 불린다. 즉 해당 모듈들은 localThread를 이용하고 있다고 볼 수 있다.
그 중에 그래도 눈에 좀 익은 ActivityManagerService.java, ActivityThread.java
가 주요한 Thread로 보인다.
모든 view에서 상속하고 있으니까느.
이제 프레임 워크 관련 책을 볼 때이다.

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...