我有一个Android应用程序,我实现了一个通过蓝牙串行连接与某些硬件交互的服务。这个连接的设置很慢,所以我决定将服务保留在前台,所以如果/当你想查看另一个应用程序时,连接就可以了(伪代码如下):
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
return (START_STICKY);
}
@Override
public void onDestroy() {
stop();
}
start()
和stop()
是开始与硬件通信的私有方法,在开始的情况下,创建Notification
以便在startForeground()
我的Activity
中使用将致电
@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
如果事情发生了可怕的错误,或者我是否滥用Service
的目的,并且应该找到一种替代方法来做我想做的事情? / p>
答案 0 :(得分:1)
也许你可以为你的应用程序的主线程(UI线程)添加一个钩子来实现崩溃,见下文:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//Kill the service.
}
});
throw new RuntimeException("Uncaught Exception");