큐 원형은 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...
-
XE(제로보드) 내 게시판의 첨부용량 변경 ㅁ 개요 ↑ XE 구축시 초기 첨부파일 용량은 2M로 제한되어 있음에 데이터 자료실을 만들기 위해 용량을 명령어를 이용하여 추가 혹은 감소 시키도록 하고자 한다. ㅁ 구현 ↑ 처음 ...
-
일단 ssh 프로그램으로 apm 셋팅을 하려고 했으나 apt-get이 계속 파일 위치를 잡지 못했다. (404 not found....) 그래서 구글링 결과 apt의 리스트 변수 목록을 제거하고 새로 업데이트 하는 명령어를 찾음 :)...
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.