如何让我的应用程序在后台运行?

时间:2012-11-23 18:55:24

标签: android sockets tcp background-process

我正在创建一个应用程序,我需要始终通过TCP套接字连接。我的应用程序已经在连接方面运行良好,但是当它被发送到后台时,android系统最终会杀死进程。这会导致它与服务器断开连接。

我一直在寻找一种方法来始终保持应用程序活着,但没有找到任何东西。 有人可以告诉我什么是最好的方法,以便我的应用程序在后台时不会关闭,或者,除非这样,如果它关闭,让它重新启动? 我从这开始就让我头疼:S

EDIT 这是我的代码的一部分:

  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 个答案:

答案 0 :(得分:3)

使用服务并通过startService()启动它。它会一直运行,直到Android停止资源

有关服务的一些文件:

  1. http://developer.android.com/reference/android/app/Service.html
  2. http://developer.android.com/guide/components/services.html

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

操作系统的本质就是这样,因为我猜想它会因为有限的内存资源而杀死后台进程。也许您应该查看 Watchdog 它的某种后台进程管理器。我不习惯Android系统,但这是我可以从我的研究中找到的。 希望有所帮助:)

也许这会对你有所帮助:

http://lifehacker.com/5608163/watchdog-monitors-your-android-for-run+away-processes

答案 4 :(得分:0)

正如其他人所说,对你提出的问题的直接答案是托管一个线程,使连接保持活动状态。

但是我想要记住你在资源有限的环境中,在后台持续连接(使用tcp协议的开销)可能会导致电池耗尽和愤怒的用户。

你应该问问自己,你是否真的希望永久保持连接,或者在有限的时间内保持连接,或者只是在某些可能由gcm消息触发的事件之后,或者如果你可以进行轮询,可能使用inexact alarm

另一种选择是仅在应用程序处于前台时建立连接。无论如何,它当然取决于你想要对你的应用程序做什么。