2

如果我们看到下一件事,我在代码中看到了很多示例:

HandlerThread thread = new HandlerThread("Thread1");
        thread.start();
        mLoadHandler = new Handler(thread.getLooper())


   mLoadHandler.post(new Runnable() {
            public void run() {
                // run some code
                //methodA();
            }
        });

您还可以在以下位置找到它:

https://github.com/android/platform_packages_apps_browser/blob/master/src/com/android/browser/OpenDownloadReceiver.java

https://github.com/CyanogenMod/android_packages_apps_Gallery3D/blob/8621799408a58f6b9da3492382ce929b3c93c7de/src/com/cooliris/picasa/PicasaService.java

为什么他们HandlerThread只为一个目的创建一个:将它传递Looper给一个新的Handler. 为什么不只是扩展HandlerThread并在那里执行所有代码(methodA())?或者创建一个 Handler 实例并在那里调用:

 Looper.prepare();
 Looper.loop();
4

2 回答 2

0

如果要获取与您创建的 ThreadHandler 类关联的 Handler,则必须传递与该 ThreadHadler 关联的 Looper,否则 Handler 将与实例化它的当前线程关联。创建这样一个 HandlerThread 的目的一般是当你想多次做同类型的工作时,你可以简单地使用这个 Handler 对象向新线程发布消息。

我认为您的问题是为什么要创建一个内部类而不是实现一个单独的独立类。如果您正在创建一个内部类,那么您可以直接访问包含类的成员。如果您实现一个单独的类,则需要将所需的变量/视图值传递给新类。

于 2016-02-20T05:31:18.340 回答
0

仅使用您显示的代码,无论哪种方式处理 HandlerThread 都没有太大区别。

但是,如果有很多不同的组件都试图将不同的 Runnables 发布到同一个线程,那么您宁愿不要将它们的所有逻辑都塞进一个类中。在这种情况下,传递一个 Handler 让这些不同的组件共享会更容易。这是一种情况,但可能还有其他情况。

于 2016-02-20T05:00:18.643 回答