当应用程序崩溃时,在Android上停止前台服务

时间:2013-05-24 13:08:45

标签: android

我有一个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>

1 个答案:

答案 0 :(得分:1)

也许你可以为你的应用程序的主线程(UI线程)添加一个钩子来实现崩溃,见下文:

Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
                //Kill the service.
            }
        });
    throw new RuntimeException("Uncaught Exception");