我可以获得一个非阻塞的循环器吗?

时间:2012-09-16 13:12:24

标签: android multithreading looper

我有一个带有消息的线程 - Looper用于某些位置计算。 为此我打电话:

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

要获得一个有效的Looper对象,我就像这样准备我的线程:

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

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

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

1 个答案:

答案 0 :(得分:0)

没有必要这样做。

当您调用Looper.loop()时,该线程会运行其处理程序的消息队列。因此,处理程序收到的任何消息或帖子都将在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中调用。

希望它有所帮助。