Java 如何获得我刚刚创建的新线程的活套?

Java 如何获得我刚刚创建的新线程的活套?,java,final,android-looper,Java,Final,Android Looper,我正在创建一个线程来处理请求。在线程中,我必须调用它正在使用的其他一些功能所需要的Looper.prepare(),然后调用Looper.loop()。但是当请求的连接关闭时,我会在另一个线程中得到一个回调。此时,我需要在线程的循环器上调用quit(),这样循环()将返回,线程将退出。然而,我很难弄清楚如何获得线程的活套。我在Thread中没有看到任何可以获取线程活套的代码。在Looper类中,我看到了一种获取当前类的Looper的方法,但我无法将此信息从线程的内部类传递给创建它的类:

我正在创建一个线程来处理请求。在线程中,我必须调用它正在使用的其他一些功能所需要的
Looper.prepare()
,然后调用
Looper.loop()
。但是当请求的连接关闭时,我会在另一个线程中得到一个回调。此时,我需要在线程的循环器上调用
quit()
,这样循环()将返回,线程将退出。然而,我很难弄清楚如何获得线程的活套。我在
Thread
中没有看到任何可以获取线程活套的代码。在
Looper
类中,我看到了一种获取当前类的Looper的方法,但我无法将此信息从线程的内部类传递给创建它的类:

                final Looper l1;
                final Thread thread = new Thread() {
                    @Override
                    public void run() {
                        Looper.prepare();
                        l1 = Looper.myLooper(); // ERROR!
                        // initialization goes here
                        Looper.loop();
                        Log.d(logtag,"The request thread is done.");
                    }
                };
                thread.start();
在紧接着上列的回调中:

webSocket.setClosedCallback(new CompletedCallback() {
    @Override
    public void onCompleted(Exception ex) {
        // other code
        l1.quit();
    }
});
我在上面标记的行中遇到编译时错误:

Cannot assign a value to final variable 'l1'.

但我还没分配呢!如果我没有将
Looper
设置为final,那么我就不能分配给它,因为它不是final。

这看起来有点像黑客,但我创建了这个类(private,在同一个文件中):

然后我修改了代码以通过活套支架:

            final LooperHolder lh = new LooperHolder();
            final Thread thread = new Thread() {
                @Override
                public void run() {
                    Looper.prepare();
                    lh.setLooper(Looper.myLooper());
                    // initialization goes here
                    Looper.loop();
                    Log.d(logtag,"The request thread is done.");
                }
            };
            thread.start();
然后在回调中:

Looper l1 = lh.getLooper();
if (l1 != null) l1.quit();

之后它在哪里被使用-回调在哪里?@ScaryWombat我更新了问题以显示回调在哪里对不起,我看不到足够的代码来理解它,但是为什么你不调用Looper quit并运行
的末尾呢?@ScaryWombat因为
Looper.loop()
直到循环完成才会返回,直到我从另一个线程调用
l1.quit()
,才会发生这种情况。您仍然没有回答我的问题。这
回调
代码在哪里?看起来你只能有一个
Looper
-如果是这样的话,为什么不把它作为一个字段呢?@ScaryWombat每次处理请求时都有一个不同的值;可以有多个线程,每个线程都需要自己的活套
Looper l1 = lh.getLooper();
if (l1 != null) l1.quit();