我试图通过套接字创建一个通知应用程序连接到服务器。我想要在我的应用程序未被用户打开的情况下在后台运行一些服务,类似于许多电子邮件/聊天应用程序,因此用户将能够接收通知。
我遇到了一个问题,即每当我清除最近的应用时服务就会被杀死。
以下是我尝试的内容:
覆盖onStartCommand以返回START_STICKY
@Override
protected void onHandleIntent(Intent intent) {
// Socket.io
mSocket.on("debug-listing", new Emitter.Listener() {
@Override
public void call(final Object... args) {
mHandler.post(new Runnable() {
@Override
public void run() {
// I want this to run in the background
String msg = (String) args[0];
Intent done = new Intent();
done.putExtra("title", msg);
done.putExtra("id", idCount++);
done.setAction("action");
sendBroadcast(done);
}
});
}
});
mSocket.connect();
Notification n = new Notification.Builder(this)
.setContentTitle("Test")
.setContentText("Test")
.setSmallIcon(R.drawable.ic_stat_ic_notification)
.build();
startForeground(421941, n);
}
每当我的应用程序打开/最小化时,我都会收到通知,但是一旦我清除了我最近的应用程序,它就会被杀死。我该如何防止这种情况发生?
答案 0 :(得分:1)
我明白了。
我覆盖了onCreate函数,将所有socket.io事件处理程序放在那里,以及在事件发生时注册我想要广播的任何广播接收器(也就是我想发送通知)。
在onStart内部我在socket变量上调用.connect(),并返回START_STICKY,当我清除最近的应用程序时,它会重启我的服务。
在onHandle内部,我什么都不做。
我想后续的问题是为什么我不在onHandleIntent中做任何事情(我不应该使用IntentService?我应该使用Service),但是这可以在另一个线程上进行。但是,我们赞赏更多解释!