我有一个 Android 应用程序,我在其中实现了一个通过蓝牙串行连接与某些硬件交互的服务。这个连接的设置很慢,所以我决定将服务保持在前台,所以如果/当你想查看另一个应用程序时,连接就可以开始了(伪代码如下):
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
return (START_STICKY);
}
@Override
public void onDestroy() {
stop();
}
start()
并且stop()
是开始与硬件通信的私有方法,在开始的情况下,创建一个Notification
用于startForeground()
My Activity
will call
@Override
public void onStart() {
super.onStart();
// Start the service
Intent intent = new Intent(getApplicationContext(), MyService.class);
ComponentName theService = startService(intent);
//this is to register the functions I need to handle functions my Activity calls
// to the service
bindService(intent, svcConn, BIND_AUTO_CREATE);
}
@Override
public void onStop() {
super.onStop();
if (theService != null) {
unbindService(svcConn);
theService = null;
if (isFinishing()) {
stopService(new Intent(getApplicationContext(), MyService.class));
}
}
}
我不得不添加一个“退出”菜单项以确保Service
关闭。更糟糕的是,如果我的应用程序崩溃,我必须进入并手动杀死Service
. 有没有办法优雅地杀死Service
如果事情发生可怕的错误,或者我是否滥用了 a 的目的Service
,并且应该找到一种替代方法来做我想做的事情?