我有一个带有消息的线程 - Looper用于某些位置计算。 为此我打电话:
LocationManager.requestLocationUpdates(mProvider, mMinTime, mMinDistance, (LocationListener)this, looper);
要获得一个有效的Looper对象,我就像这样准备我的线程:
Looper.prepare();
mLooper = Looper.myLooper();
handler = [...]
Looper.loop();
但是在同一个线程中是否有可能在数据处理中使用额外的while循环?
可能我可以以某种方式派生我自己的Looper并手动处理消息,但是如何?
答案 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中调用。
希望它有所帮助。