首先,我创建的应用程序必须在后台工作(即使用户杀死了应用程序)。我有蓝牙服务器(树莓派),我的应用应该像服务器的客户端。当连接建立时,我需要保持活动状态,并且只在用户太远的时候断开prom服务器或服务器发送特定的断开连接命令。所以我简单地找到了BluetoothChatExample并将活动中的所有代码都放到了服务中(因为即使用户杀死了应用程序,我的服务也应该独立于我的主要活动,因此我需要进行通信)。Android服务被破坏活动后重新创建
下面是从我的服务
public class BluetoothCommunicationService extends Service {
public BluetoothCommunicationService() {
}
@Override
public void onCreate() {
super.onCreate();
//....
//....
//....
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent.getAction.equals("stop") {
stopSelf();
}
return START_STICKY;
}
private class AcceptThread extends Thread {
//....
}
private class ConnectThread extends Thread {
//....
}
private class ConnectedThread extends Thread {
//....
}
@Override
public void onDestroy() {
super.onDestroy();
}
} 因此,大家可以看到,我开始我的服务为START_STICKY
一些代码片段,但这里的时候,我杀从“最近使用的应用程序”应用程序的问题列表我也杀了我的服务(即使onDestroy()
未被调用!!!),然后再调用onCreate
,服务从头开始。但蓝牙通信基于套接字,因此它们也被重新创建,并且我的连接丢失。我也尝试过START_NOT_STICKY
然而,当我关闭我的应用程序并且它从不重新创建时,我的服务就被销毁了。在用户关闭我的应用程序之后,是否有可能保持服务活着(甚至不重新创建)?
在另一个进程中运行服务对Android决定是关闭服务还是终止进程没有影响。 –
是的,但是如果你杀了你的应用程序的进程,并且你想让你的服务继续运行,你必须为它做一个单独的过程。据我了解,它的应用程序和唯一的应用程序的杀死过程不会影响服务的过程,它们独立工作,这就是大卫所问的。 –
如果他只是在谈论用户手动终止进程,答案将是“不这样做”。 –