Android 从服务中停止服务
Android Stop a service form a service
我无法停止我的服务。
我有两个服务。 Service1 使用 startService(intent) 启动 Service2。
我用 stopSelf() 停止 service1;
然后我在 Service2 中做一些事情并再次启动 Service1 并停止 Service2。
所以他们总是重新开始。
首次启动后服务的行为有所不同。
我写了一些日志消息,我可以看到日志中的信息成倍增加。
我还尝试使用 stopService 停止另一个活动的 onStartCommand 中的活动。 (在 Service1 的 onStartCommand 中我调用了 stopService service2)
这是我的代码的一部分:
服务 1:
public class Service1 extends Service{
private int startId;
@Override
public void onCreate(){
super.onCreate();
}
private void doSomething(){
...
...
Intent intent = new Intent(getApplicationContext(), Service2.class);
startService(intent);
this.stopSelf(startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
this.startId=startId;
Intent beaconIntent = new Intent(getApplicationContext(), Service2.class);
stopService(beaconIntent);
doSomething();
return START_STICKY;
}
}
服务 2:
public class Service2 extends Service implements BeaconConsumer, RangeNotifier{
private BeaconManager mBeaconManager;
private int startId;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent service1 = new Intent(getApplicationContext(), Service1.class);
stopService(service1);
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
mBeaconManager.bind(this);
this.startId = startId;
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
mBeaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
region = new Region("all-beacons-region", null, null, null);
try {
mBeaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
mBeaconManager.addRangeNotifier(this);
}
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if(!beacons.isEmpty()){
doSomething...
...
...
Intent intent = new Intent(getApplicationContext(), Service1.class);
startService(intent);
this.stopSelf();
}
}
}
我做错了什么?
编辑:我没有提到我正在使用 altbeacon 库。我认为这不会产生任何影响。
但是,当我查看启动应用程序时 运行 的服务以及停止 Service2 后,总是有两个 altbeacon 服务 运行(BeaconIntentProcessor 和 BeaconService)。
也许他们多次调用我的服务。
我明白我做错了什么。
问题不在于服务本身,而是 altbeacon 库。更具体地说,BeaconManager 仍在后台搜索信标,即使服务已被销毁。
在日志中,该服务似乎 运行 多次。
解决方案不仅要解除绑定,还要停止测距并移除测距通知器。
mBeaconManager.stopRangingBeaconsInRegion(region);
mBeaconManager.removeAllRangeNotifiers();
mBeaconManager.unbind(this);
我无法停止我的服务。
我有两个服务。 Service1 使用 startService(intent) 启动 Service2。 我用 stopSelf() 停止 service1; 然后我在 Service2 中做一些事情并再次启动 Service1 并停止 Service2。
所以他们总是重新开始。
首次启动后服务的行为有所不同。
我写了一些日志消息,我可以看到日志中的信息成倍增加。
我还尝试使用 stopService 停止另一个活动的 onStartCommand 中的活动。 (在 Service1 的 onStartCommand 中我调用了 stopService service2)
这是我的代码的一部分:
服务 1:
public class Service1 extends Service{
private int startId;
@Override
public void onCreate(){
super.onCreate();
}
private void doSomething(){
...
...
Intent intent = new Intent(getApplicationContext(), Service2.class);
startService(intent);
this.stopSelf(startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
this.startId=startId;
Intent beaconIntent = new Intent(getApplicationContext(), Service2.class);
stopService(beaconIntent);
doSomething();
return START_STICKY;
}
}
服务 2:
public class Service2 extends Service implements BeaconConsumer, RangeNotifier{
private BeaconManager mBeaconManager;
private int startId;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent service1 = new Intent(getApplicationContext(), Service1.class);
stopService(service1);
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
mBeaconManager.bind(this);
this.startId = startId;
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
mBeaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
region = new Region("all-beacons-region", null, null, null);
try {
mBeaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
mBeaconManager.addRangeNotifier(this);
}
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if(!beacons.isEmpty()){
doSomething...
...
...
Intent intent = new Intent(getApplicationContext(), Service1.class);
startService(intent);
this.stopSelf();
}
}
}
我做错了什么?
编辑:我没有提到我正在使用 altbeacon 库。我认为这不会产生任何影响。 但是,当我查看启动应用程序时 运行 的服务以及停止 Service2 后,总是有两个 altbeacon 服务 运行(BeaconIntentProcessor 和 BeaconService)。 也许他们多次调用我的服务。
我明白我做错了什么。
问题不在于服务本身,而是 altbeacon 库。更具体地说,BeaconManager 仍在后台搜索信标,即使服务已被销毁。 在日志中,该服务似乎 运行 多次。
解决方案不仅要解除绑定,还要停止测距并移除测距通知器。
mBeaconManager.stopRangingBeaconsInRegion(region);
mBeaconManager.removeAllRangeNotifiers();
mBeaconManager.unbind(this);