我正在创建一个应用程序,我需要始终通过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;
}
但该应用似乎在启动时被冻结。我没有太多的经验,所以也许我的错误很简单,我没有注意到它。
答案 0 :(得分:3)
使用服务并通过startService()
启动它。它会一直运行,直到Android停止资源
有关服务的一些文件:
答案 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。
另一种选择是仅在应用程序处于前台时建立连接。无论如何,它当然取决于你想要对你的应用程序做什么。