3

我有一个带有消息循环器的线程,用于一些位置计算。为此,我呼吁:

LocationManager.requestLocationUpdates(mProvider, mMinTime, mMinDistance, (LocationListener)this, looper);

为了获得一个有效的 Looper 对象,我准备了我的线程,如下所示:

    Looper.prepare();
    mLooper = Looper.myLooper();
    handler = [...]
    Looper.loop();

但是是否有可能在同一个线程中有一个额外的while循环用于数据处理?

也许我可以以某种方式派生出自己的 Looper 并手动处理消息,但是如何?

4

1 回答 1

0

没有必要这样的事情。

当您调用 Looper.loop() 时,线程运行它的处理程序的消息队列。因此,Handler 收到的任何消息或帖子都将在 Looper 线程上进行处理。

像这样:

Thread t1 = new Thread(new Runnable()
{
    @Override
    public void run() {

    Looper.prepare();

    final Handler h = new Handler();
        final boolean isRunning = true;

        Thread t2 = new Thread(new Runnable() {

            @Override
            public void run()
            {
                //Do stuff like download


                h.post(new Runnable() {

                     @Override
                     public void run() {

                         //Post stuff to Thread t1

                     }
                });

                isRunning = false;
                h.getLooper().quit();
            }
        }

    while(isRunning)
    {
            //This will ensure that the messages sent by the Handler, be called inside the Thread
    Looper.loop();
    }
    }
}   

这样,您可以确保线程持续运行响应 Handler 帖子和回调所需的时间。您还可以使用自己的 handleMessage 方法扩展 Handler,它们也将在 Thread t1 中被调用。

希望能帮助到你。

于 2013-08-08T19:20:52.920 回答