我具有以下代码段,该代码段在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);
创建全局变量
Runnable run = new Runnable(){....}
将其用于您的Handler.in onStop(),请致电
handler.removeCallbacks(run);
在您的onResume()中,致电
if(run != null && handler != null){
handler.post(run)
}