[Android Studio在用户不活动时停止可运行处理程序

问题描述 投票:0回答:1

我具有以下代码段,该代码段在Activity的on create方法中运行。它设置为每几秒钟运行一次(此刻为20)。基本上,它每20秒寻找一次新位置并更新一些编辑文本。但是,当我关闭该应用程序或我在该应用程序上处于非活动状态时,它会继续运行(在手机上进行其他操作时,我在屏幕上看到Toast)。当用户退出活动时(或者在用户不活动时(例如,不活动60秒后),甚至可以更好),有没有一种方法可以阻止此代码运行。

谢谢


final Handler ha = new Handler();
        ha.postDelayed(new Runnable() {

            @Override
            public void run() {

                if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                    // set the online check
                    Boolean bolIsOnline = isNetworkAvailable();

                    if(bolIsOnline){
                        txtOnline.setText("Internet Status: Online");
                    } else{
                        txtOnline.setText("Internet Status: Offline");
                    }


                    criteria = new Criteria();
                    criteria.setAccuracy(Criteria.ACCURACY_COARSE);

                    provider = locationManager.getBestProvider(criteria, true);
                    String strProvider = provider;

                    if(strProvider.trim().equals("gps")){
                        Log.d(TAG, "pppp: " + strProvider);
                        txtGps.setText("GPS Status: GPS enabled");
                        Toast.makeText(context, provider, Toast.LENGTH_LONG).show();
                        locationManager.requestLocationUpdates(provider, 20000, 30, locationListenerGPS);
                    } else if(strProvider.trim().equals("network")){
                        Log.d(TAG, "pppp: " + strProvider);
                        txtGps.setText("GPS Status: Network only");
                        Toast.makeText(context, provider, Toast.LENGTH_LONG).show();
                        locationManager.requestLocationUpdates(provider, 20000, 30, locationListenerGPS);
                    } else{
                        txtGps.setText("GPS Status: None");
                        Toast.makeText(context, "None", Toast.LENGTH_LONG).show();

                        fusedLocationProviderClient.getLastLocation().addOnSuccessListener(actAddSighting.this, new OnSuccessListener<Location>() {
                            @Override
                            public void onSuccess(Location location) {

                                final Double dblLatitude = location.getLatitude();
                                final Double dblLongitude = location.getLongitude();
                                final Double dblAltitude = location.getAltitude();

                                getInitialValues(dblLatitude, dblLongitude, dblAltitude, "Last Location");

                            }
                        });

                    }

                } else {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_REQUEST_FINE_LOCATION);
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSION_REQUEST_COARSE_LOCATION);
                }

                ha.postDelayed(this, 20000);
            }
        }, 20000);

android android-studio handler runnable
1个回答
0
投票

创建全局变量

Runnable run = new Runnable(){....}

将其用于您的Handler.in onStop(),请致电

handler.removeCallbacks(run);

在您的onResume()中,致电

if(run != null && handler != null){
   handler.post(run)    
}
© www.soinside.com 2019 - 2024. All rights reserved.