如何让我的应用在后台持续运行?

4
我正在创建一个应用程序,需要通过TCP套接字始终保持连接。我的应用程序在连接方面已经运作良好,但当它被发送到后台时,安卓系统最终会杀死进程。这导致它与服务器断开连接。
我一直在寻找一种方法来始终保持应用程序处于活动状态,但没有找到任何方法。有人能告诉我使应用程序在后台时不关闭的最佳方法是什么,或者,如果应用程序关闭了,如何重新启动?
以下是我的代码的一部分:
  public int onStartCommand(Intent intent, int flags, int startId) {

      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

      new Thread(new Runnable() { 
            public void run() {
                Playit();               }
        }).start();


     return START_STICKY;
  }

应用程序似乎在启动时出现了冻结。虽然我没有太多的经验,所以也许我的错误很简单,我还没有注意到它。

5个回答

3

1
抱歉耽搁了,我一直在研究服务并尝试创建一个,但是如果我关闭应用程序,服务就会停止。我希望当我关闭我的应用程序时,服务仍然可以继续运行,并且当您重新打开应用程序时,检查服务是否仍在运行,如果没有,则重新启动它。 也许我的问题很愚蠢,但我还是个新手,还不太明白。 - robertDraven
如果您通过“startService”启动服务,则在停止活动时,服务不会停止。 - RvdK
所以如果应用程序关闭了,我要重新打开它,因为我需要检查服务是否正在运行?如果您只是使用StartService(意图)开始,则可以与服务对象通信? - robertDraven
您可以通过以下方式进行通信:在startService之后,调用bindService,然后通过它进行通信。或者通过多个startService调用发送Intents。 - RvdK
可能是因为Android为了资源而终止了您的服务。如果您使用START_STICKY启动它,它将在被终止后自动重新启动。 - RvdK
显示剩余2条评论

0

用户使用服务。服务用于在后台执行长时间运行的操作,例如在与服务器连接时发送/接收数据。


0

请查看Android的Service类。请注意,Service并不是一个单独的线程,它只是您应用程序线程的一部分,但在创建和销毁方面由操作系统以不同的方式处理。

如果您需要额外的线程,当然可以在Service中创建一个。


0

正如其他人所说,回答你的问题的直接方法是托管一个线程,使连接保持活动状态进入服务。

然而,我想提醒你,你处于资源有限的环境中,在后台拥有持久连接(带有tcp协议的开销)可能会导致电池耗尽和用户不满。

你应该问问自己,你是否真的想永久保持连接,还是有限的时间,或者只在一些由gcm消息触发的事件之后,或者你可以选择轮询,也许使用一个不精确的闹钟

另一个选项是仅在应用程序在前台时建立连接。无论如何,这肯定取决于你想要做什么与你的应用程序。


你让我解释一下,我的应用程序需要连接以确保安全,因为它的目的是监视我们的供应商。当我需要知道他们在哪里时。知道他们何时偏离路线。所以我需要它始终连接到我们的服务器。如果不小心断开连接,就无法获得他的位置或一些数据来编译我的应用程序。 - robertDraven

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接