2013-07-16 2 views
0

저는 HandlerThread를 확장하는 MyThread를 가지고 있으며, MyThread 클래스 내의 큐에 실행 파일을 게시해야합니다.HandlerThread가 자신의 큐에 게시해야합니다.

나는이 작업을 수행하는 방법을 알고있는 유일한 방법은 실행 가능한 연구를 게시 할

h = new MyHandler(Looper.myLooper()); 

다음 h.post(r)를 호출하는 것입니다.

하지만 루퍼를 만들기 전에 스레드를 시작해야하기 때문에 새로운 MyHandler() 행을 어디에 넣을 지 잘 모르겠습니다. MyThread를 시작하고 거기에 runnables를 게시하는 또 다른 클래스가 있지만 이제는 클래스 내에서 실행해야합니다. 어떤 아이디어?

편집 :

class MyThread extends HandlerThread { 


private MyHandler h; 
private Runnable r; 

MyThread(String name, int priority) { 
    super(name, priority); 
    //h = new MyHandler(); 
    r = new MyRunnable(); 
} 

@Override 
public void start() { 
    super.start(); 
    //h = new MyHandler(); 
} 

class MyRunnable implements Runnable { 
    @Override 
    public void run() { 
     //... 
    } 
} 

void startCount(long delay) { 
    h.postDelayed(r, delay); 
} 

} 

모두 주석 처리 된 줄은 동일한 결과를 생성 : R 대신 내가 달성하고자하는 것입니다이 HandlerThread에서 실행되는 주 스레드에서 실행됩니다.

+0

내가 알고 호출'새가 MyHandler (Looper.myLooper()) 후 (R).'내가 잘 실행 가능한 작품을 게시 할 만 할 수있는 더 나은 방법이있을 때마다? – sundie

답변

0
HandlerThread ht = ... 
ht.start(); 
Handler h = new Handler(ht.getLooper(), callback) 
+0

스레드가 HandlerThread가 자신의 대기열에 실행 파일을 게시하려고 할 때까지 이미 시작 되었어야합니다. 제 질문은 '루퍼'에게 처리기를 가져올 때 '알 수없는'것입니다. 스레드가 아직 시작되지 않았기 때문에 생성자에서 .. – sundie

+0

ht.start() – pskink

+0

스레드가 이미 다른 클래스에 의해 시작되었다 .. 후 핸들러를 만들었습니다 .. 두 번 같은 스레드를 시작할 수 있다고 생각하지 않아? – sundie

관련 문제