0
1. Looper.prepare();
2. Handler mHandler = new Handler() {
3. public void handleMessage(Message msg) {}
4. };
5. mHandler.post(gpsLocationListenerThread);
6. Looper.loop();
7. 

我正在ThreadAsyncTask. 当我使用 1-6 中的代码调用它时,它会创建Thread并运行它。但是AsyncTask卡在那里。我需要在Thread不阻塞我的AsyncTask. 如何让它发生?

public GPSLocationListenerThread(Context context){
    this.context = context;
    mlocManager = (LocationManager)context.getSystemService(context.LOCATION_SERVICE);
    mlocListener = new GPSLocationListener();
}

public void setHandler(Handler _h){
    this.mHandler = _h;
}

public void run(){
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 100, mlocListener); // in 1000 mseconds or in 100m change
    mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 100, mlocListener); // in 1000 mseconds or in 100m change
    //mHandler.getLooper().quit();
    while (DataHolder.getDataHolderObject().isTripStarted()){
        try {
            this.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    mlocManager.removeUpdates(mlocListener);
}                   
4

2 回答 2

0

与文档相反,并不总是需要退出 looper。
如果你坚持 - 你必须在弯针的同一线程上调用它。在这里
查看我的详细答案。

于 2013-11-22T00:19:02.687 回答
0

那么你需要调用 Looper.quit(); 无论如何,否则它永远不会退出。你需要在哪里调用它我不知道,除非你发布更多代码:)

于 2012-10-05T12:01:54.617 回答