我有一个在后台进程中运行的服务。该服务将在用户杀死应用程序后搜索蓝牙设备。
<service android:name=".BLEBackgroundService"
android:enabled="true"
android:process=":externalBLEProcess"/>
在BLEBacgroundService类我有:
public class BLEBackgroundService extends Service{
.
.
.
public BLEDetector bleDetector;
public int onStartCommand(Intent intent, int flags, int startId) {
.
.
.
Log.i(tag,"onStartCommand");
startScan();
return START_STICKY;
}
void startScan() {
bleDetector.startScan();
Log.d(tag,"StartScan");
}
@Override
public void onDestroy() {
bleDetector.stopScan();
Log.w(tag,"Service OnDestroy");
super.onDestroy();
}
}
在我的BLEDetector课程中,我有:
public class BLEDetector{
.
.
.
BluetoothAdapter mBAdapter;
public void stopScan(){
Log.i(tag,"StopScan");
mBAdapter.stopLeScan(stopCallback);
}
}
在我的活动中,我是如何开始这项服务的:
public class MyActivity extends AppCompatActivity{
Intent serviceIntent;
.
.
.
//This part is inside a Retrofit Callback onResponse
serviceIntent = new Intent(ItemListActivity.this,BLEBackgroundService.class);
serviceIntent.putExtra
(BasicUtils.getStringResource(getApplicationContext()
,R.string.beaconJsonIdentifier),new Gson().toJson(beaconModel));
serviceIntent.putExtra
(BasicUtils.getStringResource
(getApplicationContext(),R.string.currssiID), prgss);
if (BleUtil.isBluetoothEnabled(getApplicationContext()))
startService(serviceIntent);
}
public void disableService(){
stopService(serviceIntent);
}
当我尝试停止此服务时,我只需拨打disableService()
。
当我开始服务时,它成功调用onCreate
并且服务开始在单独的进程上进行,我可以从Logcat看到日志。但是当我尝试停止服务时它会打印
答案 0 :(得分:0)
最后,在阅读了this部分文档后,我意识到有时我的服务onStartCommand
函数被调用两次(我不知道为什么),因为我每次创建bleDetector
{{} 1}}函数被调用,我失去了对它的引用。
所以我所要做的就是检查onStartCommand
是否为空。
我怎么也不知道为什么bleDetector
被多次调用。当我使用改造从服务器获得成功的响应时,我只在我的活动中调用onStartCommand
。
修改强>:
有时在我的活动中,多次调用startService
,这就是多次调用onResume
的原因。