清除最近的事件后,Socket.io的IntentService被杀死

时间:2015-11-25 16:58:37

标签: android sockets service

我试图通过套接字创建一个通知应用程序连接到服务器。我想要在我的应用程序未被用户打开的情况下在后台运行一些服务,类似于许多电子邮件/聊天应用程序,因此用户将能够接收通知。

我遇到了一个问题,即每当我清除最近的应用时服务就会被杀死。

以下是我尝试的内容:

  • 使用IntentService,我从onCreate of my main activity
  • 开始
  • 在onHandleIntent
  • 中调用startForeground
  • onHandleIntent包含我的套接字连接启动
  • 覆盖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);
    }
    

每当我的应用程序打开/最小化时,我都会收到通知,但是一旦我清除了我最近的应用程序,它就会被杀死。我该如何防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

我明白了。

我覆盖了onCreate函数,将所有socket.io事件处理程序放在那里,以及在事件发生时注册我想要广播的任何广播接收器(也就是我想发送通知)。

在onStart内部我在socket变量上调用.connect(),并返回START_STICKY,当我清除最近的应用程序时,它会重启我的服务。

在onHandle内部,我什么都不做。

我想后续的问题是为什么我不在onHandleIntent中做任何事情(我不应该使用IntentService?我应该使用Service),但是这可以在另一个线程上进行。但是,我们赞赏更多解释!