fix hanging UI on MapWorker.pause/.proceed
This commit is contained in:
@@ -93,7 +93,7 @@ public class MapView extends GLSurfaceView {
|
||||
private IMapRenderer mMapRenderer;
|
||||
private JobQueue mJobQueue;
|
||||
private MapWorker mMapWorkers[];
|
||||
private int mNumMapWorkers = 6;
|
||||
private int mNumMapWorkers = 4;
|
||||
private JobParameters mJobParameters;
|
||||
private DebugSettings mDebugSettings;
|
||||
private String mMapFile;
|
||||
@@ -301,15 +301,15 @@ public class MapView extends GLSurfaceView {
|
||||
/**
|
||||
* Calculates all necessary tiles and adds jobs accordingly.
|
||||
*/
|
||||
public synchronized void redrawTiles() {
|
||||
if (getWidth() <= 0 || getHeight() <= 0)
|
||||
public void redrawTiles() {
|
||||
if (getWidth() > 0 && getHeight() > 0)
|
||||
return;
|
||||
|
||||
mMapRenderer.redrawTiles(false);
|
||||
}
|
||||
|
||||
void clearAndRedrawMapView() {
|
||||
if (getWidth() <= 0 || getHeight() <= 0)
|
||||
if (getWidth() > 0 && getHeight() > 0)
|
||||
return;
|
||||
|
||||
mMapRenderer.redrawTiles(true);
|
||||
@@ -525,7 +525,6 @@ public class MapView extends GLSurfaceView {
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
} finally {
|
||||
mapWorkersProceed();
|
||||
try {
|
||||
if (inputStream != null) {
|
||||
inputStream.close();
|
||||
@@ -533,7 +532,9 @@ public class MapView extends GLSurfaceView {
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
mapWorkersProceed();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -604,13 +605,13 @@ public class MapView extends GLSurfaceView {
|
||||
@Override
|
||||
protected synchronized void onSizeChanged(int width, int height, int oldWidth,
|
||||
int oldHeight) {
|
||||
for (MapWorker mapWorker : mMapWorkers) {
|
||||
mapWorker.pause();
|
||||
mapWorker.awaitPausing();
|
||||
super.onSizeChanged(width, height, oldWidth, oldHeight);
|
||||
mapWorker.proceed();
|
||||
}
|
||||
// redrawTiles();
|
||||
mJobQueue.clear();
|
||||
|
||||
mapWorkersPause();
|
||||
|
||||
super.onSizeChanged(width, height, oldWidth, oldHeight);
|
||||
|
||||
mapWorkersProceed();
|
||||
}
|
||||
|
||||
void destroy() {
|
||||
@@ -618,6 +619,7 @@ public class MapView extends GLSurfaceView {
|
||||
// mZoomAnimator.interrupt();
|
||||
|
||||
for (MapWorker mapWorker : mMapWorkers) {
|
||||
mapWorker.pause();
|
||||
mapWorker.interrupt();
|
||||
|
||||
try {
|
||||
@@ -754,10 +756,12 @@ public class MapView extends GLSurfaceView {
|
||||
|
||||
private void mapWorkersPause() {
|
||||
for (MapWorker mapWorker : mMapWorkers) {
|
||||
if (!mapWorker.isPausing()) {
|
||||
if (!mapWorker.isPausing())
|
||||
mapWorker.pause();
|
||||
}
|
||||
for (MapWorker mapWorker : mMapWorkers) {
|
||||
if (!mapWorker.isPausing())
|
||||
mapWorker.awaitPausing();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ public class MapWorker extends PausableThread {
|
||||
private final IMapGenerator mMapGenerator;
|
||||
private final IMapRenderer mMapRenderer;
|
||||
|
||||
// private final int mPrio;
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* thread id
|
||||
@@ -46,6 +48,7 @@ public class MapWorker extends PausableThread {
|
||||
mMapRenderer = mapRenderer;
|
||||
|
||||
THREAD_NAME = "MapWorker" + id;
|
||||
// mPrio = Math.max(Thread.MIN_PRIORITY + id, Thread.NORM_PRIORITY - 1);
|
||||
}
|
||||
|
||||
public IMapGenerator getMapGenerator() {
|
||||
@@ -63,7 +66,6 @@ public class MapWorker extends PausableThread {
|
||||
|
||||
if (mMapGenerator == null || mapGeneratorJob == null)
|
||||
return;
|
||||
// Log.d(THREAD_NAME, "processing: " + mapGeneratorJob.tile);
|
||||
|
||||
boolean success = mMapGenerator.executeJob(mapGeneratorJob);
|
||||
|
||||
@@ -77,10 +79,15 @@ public class MapWorker extends PausableThread {
|
||||
return THREAD_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void takeabreak() {
|
||||
mMapGenerator.getMapDatabase().cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getThreadPriority() {
|
||||
// return (Thread.NORM_PRIORITY + Thread.MIN_PRIORITY) / 2;
|
||||
return Thread.MIN_PRIORITY;
|
||||
return (Thread.NORM_PRIORITY + Thread.MIN_PRIORITY) / 2;
|
||||
// return mPrio;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -58,6 +58,7 @@ public abstract class PausableThread extends Thread {
|
||||
public final synchronized void pause() {
|
||||
if (!mShouldPause) {
|
||||
mShouldPause = true;
|
||||
takeabreak();
|
||||
notify();
|
||||
}
|
||||
}
|
||||
@@ -116,6 +117,10 @@ public abstract class PausableThread extends Thread {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
protected void takeabreak() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* Called once at the end of the {@link #run()} method. The default implementation is empty.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user