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

Threadからクラスを呼び出していAsyncTaskます。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

ドキュメントに反して、常にルーパーを終了する必要はありません。
そして、あなたが主張するなら、ルーパーの同じスレッドでそれを呼び出さなければなりません。ここで
私の精巧な答えを見てください。

于 2013-11-22T00:19:02.687 に答える
0

Looper.quit(); を呼び出す必要があります。とにかく、またはそれは決して終了しません。どこで呼び出す必要があるのか​​ 、もう少しコードを投稿しない限りわかりません:)

于 2012-10-05T12:01:54.617 に答える