如何停止 运行 runOnUiThread Runnable

How do I Stop a running runOnUiThread Runnable

我希望能够打开和关闭 MyLocationNewOverlay。我当前的代码是:-

    void btnTrack() {
        btnTrack = (Button) findViewById(R.id.btnStart);

        btnTrack.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            String btnText = btnTrack.getText().toString();
            GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
            provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
            // My Location Overlay
            MyLocationNewOverlay mysLocationoverlay = new MyLocationNewOverlay(provider, map);

            if (btnText.equalsIgnoreCase("Start")) {
                /**************************************************************************
                 *      Get and display the current location
                 **************************************************************************/

                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                mysLocationoverlay.enableMyLocation(); // not on by default
                mysLocationoverlay.setDirectionArrow(BitmapFactory.decodeResource(getResources(),
                        R.drawable.marker_node), BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi_default));
                mysLocationoverlay.runOnFirstFix(new Runnable() {
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                btnTrack.setText("CANCEL");
                            }
                        });
                    }
                });

                map.getOverlays().add(mysLocationoverlay);
            }
            else {
                mysLocationoverlay.disableMyLocation();
                mysLocationoverlay.disableFollowLocation();
                map.getOverlays().remove(mysLocationoverlay);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                btnTrack.setText("START");
            }
        }
    });
}

我很确定问题出在 runnable 上,但是当我将按钮切换到“取消”led 时,我看不到任何终止它的方法。

我正在使用 osmdroid v6.1.0 和 osmbonuspack v6.6.0

如何停止运行?

每次单击按钮时,您都在创建 MyLocationNewOverlay 的本地实例。

第一次单击按钮时,会创建、激活 MyLocationNewOverlay 实例并将其添加到地图视图中。

第二次单击该按钮时,将创建另一个新的 MyLocationOverlay 实例。这个新实例被停用并从地图视图中删除 - 好吧,不是真的,因为它从未被激活或添加过。

我建议在您的 activity(或片段,取决于您的情况)中保留对 MyLocationOverlay 实例的引用,并仅在第一次单击按钮时创建它(检查是否为空)。