큐 원형은 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에서 상속하고 있으니까느.
이제 프레임 워크 관련 책을 볼 때이다.
2011년 3월 24일 목요일
피드 구독하기:
댓글 (Atom)
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...
-
연휴 마지막날 아침... 산책을 하다 한장 찍어보았다. 인생도 마찬가지로 길의 끝을 모른체 선택을 해야하는 경우가 발생한다. 나중에 그 기준이 바뀔수도 있지만. 지금 기준은 많은 사람이 함께 갈 수 있는 길을 선택하고 싶다.
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
-
제로보드 세팅. sudo apt-get install apache2 mysql-server libapache2-mod-php5 phpmyadmin ssh 패키지를 이용한 소프트웨어 설치 - APM세팅 및 ssh 설치 ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.