android服务不停止,java – 调用stopService()时不停止Android服务

我有一个停止我已经开始的服务的问题.

用户登录时会调用该服务,并开始跟踪用户的位置.这工作正常.当用户按下注销按钮并成功注销时,该服务将停止.

这是一个Android服务,通过HTML按钮通过JavaScript界面​​调用.

这是我的Main Class,它包含启动和停止服务的方法:

public class CasesMain extends DroidGap {

Intent gpsTracking;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.init();

appView.addJavascriptInterface(this, "StartGPS");

super.loadUrl(Config.getStartUrl());

}

public void startGPS(){

gpsTracking = new Intent(this, MyService.class);

startService(gpsTracking);

}

public void stopGPS(){

stopService( gpsTracking );

}

}

这是MyService类:

public class MyService extends Service {

private LocationManager locManager;

private LocationListener locListener = new myLocationListener();

private boolean gps_enabled = false;

private boolean network_enabled = false;

private Handler handler = new Handler();

Thread t;

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

}

@Override

public void onDestroy() {

}

@Override

public void onStart(Intent intent, int startid) {

}

public int onStartCommand(Intent intent, int flags, int startId) {

Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT)

.show();

final Runnable r = new Runnable() {

public void run() {

location();

handler.postDelayed(this, 10000);

}

};

handler.postDelayed(r, 10000);

return START_STICKY;

}

public void location() {

locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

try {

gps_enabled = locManager

.isProviderEnabled(LocationManager.GPS_PROVIDER);

} catch (Exception ex) {

}

try {

network_enabled = locManager

.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

} catch (Exception ex) {

}

if (gps_enabled) {

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,

0, locListener);

}

if (network_enabled) {

locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,

0, 0, locListener);

}

}

private class myLocationListener implements LocationListener {

double lat_old = 0.0;

double lon_old = 0.0;

double lat_new;

double lon_new;

@Override

public void onLocationChanged(Location location) {

if (location != null) {

locManager.removeUpdates(locListener);

lon_new = location.getLongitude();

lat_new = location.getLatitude();

String longitude = "Longitude: " + location.getLongitude();

String latitude = "Latitude: " + location.getLatitude();

Log.v("Debug", "Latt: " + latitude + " Long: " + longitude);

Toast.makeText(getApplicationContext(),

longitude + "\n" + latitude, Toast.LENGTH_SHORT).show();

lat_old = lat_new;

lon_old = lon_new;

}

}

@Override

public void onProviderDisabled(String provider) {

}

@Override

public void onProviderEnabled(String provider) {

}

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

}

}

}

这是我停止服务的呼吁:window.StartGPS.stopGPS();

开始工作完美,但是当我退出时,应用程序继续显示字符和long的消息意味着对stopService()的调用要么不起作用要么不被调用.

任何人都可以看到我的错误在哪里或出了什么问题?

任何帮助将不胜感激!

固定

添加handler.removeCallbacksAndMessages(null);在MyService的onDestroy()方法中为我修复了它.

解决方法:

Can anyone see where my mistake is or what is going wrong?

你有一个空的onDestroy()方法.你需要在那里的Handler上调用removeCallbacks().

标签:java,android,android-intent,service,cordova

来源: https://codeday.me/bug/20190713/1446449.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值