Android连接到正在运行的线程

时间:2011-07-01 15:30:26

标签: android multithreading android-asynctask

我正在创建一个具有UIThread和后台线程的应用。后台线程基本上被用作计时器 - 它每秒向UIThread发送一条消息来更新UI。当用户通过点击后退按钮退出应用程序时,线程继续运行。我希望这种情况发生,因为用户可能希望在计时器继续倒计时打开另一个应用程序。

我的问题是用户何时回到我的应用程序。我想连接到正在运行的后台线程,以显示应用程序的当前状态 - 剩余多少时间等。我的问题是如何挂钩到仍在后台运行的线程。我尝试过使用Thread和AsyncTask,但同样的问题也出现了。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

你的线程仍然只是偶然的机会 - 你的应用程序实际上仍在运行但是当Android决定它需要资源时它将被关闭。

但是,您想要做的是在Android中提供的 - 您需要实现一个服务,以使进程在后台与您的应用程序分开运行。无论应用程序是否已启动,您甚至可以在启动时启动服务并运行。

http://developer.android.com/reference/android/app/Service.html包含您需要知道的大部分内容。要在服务和前台活动之间进行通信,您需要绑定到服务接口,幸运的是,这很容易完成。

答案 1 :(得分:0)

首先想到的是将计时器线程更改为服务,并让对它感兴趣的应用程序绑定到该服务。基于Android文档和建议的应用程序设计,您无法在必要时依赖该线程 被操作系统杀死。

http://developer.android.com/guide/topics/fundamentals/services.html

答案 2 :(得分:0)

android系统每分钟都会提供一个广播事件,它叫做TIME_TICK。

你应该:

  • 创建服务。这是让应用程序的一部分在后台运行的推荐方法
  • 收听TIME_TICK事件。这将消耗更少的电池。 (It won't wake the phone, though,所以也要使用ALARM)
  • 添加闹钟(必要时唤醒手机)
  • 让UI和服务互动。您需要callback via rpc(请参阅api页面上的最后一个回调示例)

您还应确保手机可以在此时间范围内睡眠。因此,您可能希望将状态计算为起点和现在之间的增量,而不是始终更新状态。