0
線程:如何正確停止「繪圖」螺紋
public class DrawThread extends Thread {
private RMapCanvas canvas;
final Handler myHandler = new Handler();
final ArrayList<RGroupMapLayer> layers;
public DrawThread(RMapCanvas aCanvas, ArrayList<RGroupMapLayer> arrayOfLayers)
{
canvas = aCanvas;
layers = arrayOfLayers;
}
public void run() {
activity.RaiseNotification(activity.getApplicationContext().getResources().getString(R.string.loading).toString());
for (RGroupMapLayer l : layers)
{
l.validateAndRepairView(false, canvas.renderer, canvas.mapView);
l.render(canvas.renderer, canvas.mapView, canvas.mapEvent, 5000000, 5000000);
if (settings.getPositionFeature() != null)
{
RPointFeatureStyle positionStyle = new RPointFeatureStyle(RPointFeatureStyle.SIMPLE_POINT_STYLE_GPS);
positionStyle.render(settings.getPositionFeature(), renderer, mapView);
}
myHandler.post(new Runnable() {
@Override
public void run() {
canvas.RenderComplete();
}});
}
activity.statusMessage.cancel();
}
public synchronized void requestStop() {
activity.statusMessage.cancel();
this.interrupt();
}
}
調用它中斷一個線程是不夠的requestStop。線程只是繼續運行。有人可以更新代碼以顯示停止此線程的正確方法嗎?順便說一下... RenderComplete()方法更新UI(在我的情況下,女巫是一個問題,因爲即使新的啓動器和舊的代碼中斷,「舊」線程也會不斷更新UI)。
Thanx提前。
整個故事並不安靜,你需要確保'flag'在這種情況下是不穩定的。首選的方法是使用(內部)中斷標誌...所以while(!Thread.currentThread()。isInterruptted()) – Toby
@Toby,這不是一個好方法來自己中斷線程,也不停止或暫停它。 – Egor