我如何终止HandlerThreads?

遵循谷歌使用服务的例子,我创build了一些像这样的线程。 我不能使用IntentService,因为我正在做一些涉及等待callback的事情。

但是,我不知道如何终止以这种方式启动的Thread。 据我所知,当run()方法返回时,线程会自动终止。 但是,这种线程没有run方法。 我的线程正在泄漏 – 他们在stopSelf()之后仍然活着。

@Override public void onCreate() { HandlerThread thread = new HandlerThread("ServiceStartArguments", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread.start(); HandlerThread thread2 = new HandlerThread("CallbackHandling", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread2.start(); mServiceLooper = thread.getLooper(); mCallbackLooper = thread2.getLooper(); mServiceHandler = new MyHandler(mServiceLooper); mCallbackHandler = new Handler(mCallbackLooper); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); mMainThreadHandler=new Handler(); // If we get killed, after returning from here, restart return START_STICKY; } private final class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { cycle(); // Stop the service using the startId, so that we don't stop // the service in the middle of handling another job stopSelf(msg.arg1); } } protected void cycle() { ... mCallbackHandler.post(new Runnable(){ public void run(){ goAskForSomeCallbacks(); } }); try { Thread.sleep(GIVE_UP_TIME); } catch (InterruptedException e){ //The callback will interrupt this thread to stop it from waiting Log.d(TAG,"Got early callback, stop waiting."); } Thread.interrupted(); //clear the interrupt doStuff(); } 

Solutions Collecting From Web of "我如何终止HandlerThreads?"

尝试在相应的Loopers上调用quit方法。

你可以在处理线程上调用quit方法。

例如

 thread.quit(); thread2.quit(); 

强制closures应用程序,但否则,他们只是继续自己的。