您正在尝试在创建的新线程中启动Android事件处理程序,例如onLocationChanged.在线程类的“ run()”方法中,您需要调用Looper.prepare(),注册事件处理程序,然后调用Looper.loop().处理完线程后,调用Looper.myLooper().quit()方法退出.
例:
public class MyActivity extends Activity {
private Thread thread = new ThreadClass();
private static Looper threadLooper = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Begin the location reading thread.
thread.start();
// do UI stuff in here
// never sleep in UI thread. Example only.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// end the thread.
threadLooper.quit();
// quit the activity
this.finish();
}
private class ThreadClass extends Thread {
@Override
public void run() {
Looper.prepare();
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
MyLocationListener locListen = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, locListen);
threadLooper = Looper.myLooper();
Looper.loop(); // loop until "quit()" is called.
// remove the update listener to prevent the locationManager from calling it.
locationManager.removeUpdates(locListen);
}
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
/* Do very intensive work here */
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}