Android连接到正在运行的线程

Android连接到正在运行的线程,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我正在创建一个具有UIThread和后台线程的应用程序。后台线程基本上被用作计时器——它每秒向UIThread发送一条消息以更新UI。当用户点击backbutton退出应用程序时,线程将继续运行。我希望这种情况发生,因为当计时器继续倒计时时,用户可能想要打开另一个应用程序 我的问题是用户何时返回到我的应用程序。我想连接到正在运行的后台线程,以显示应用程序的当前状态-还剩多少时间,等等。我的问题是如何连接到仍在后台运行的线程。我尝试过使用Thread和AsyncTask,但同样的问题也出现了 感谢

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

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


感谢您提供的帮助。

首先想到的是将计时器线程更改为服务,并将感兴趣的应用程序绑定到该服务。基于Android文档和建议的应用程序设计,你不能指望该线程在必要时不会被操作系统杀死


你的线程仍然在转动,这完全是偶然的-你的应用程序实际上还在运行,但当Android决定需要资源时,它和线程将被关闭

然而,你想要做的事情在Android中得到了很好的满足——你需要实现一个服务,让一个进程在后台独立于你的应用程序运行。您甚至可以在启动时启动服务,并在应用程序是否启动时运行


这是你需要知道的大部分。要在服务和前台活动之间进行通信,您需要绑定到服务接口,幸运的是,这非常容易完成。

android系统每分钟提供一次广播事件,这是通话时间

你应该:

  • 创建一个服务。这是让应用程序的一部分在后台运行的推荐方式
  • 听时间滴答声事件。这将消耗更少的电池。(,所以也要使用闹钟)
  • 添加闹钟(必要时唤醒手机)
  • 让UI和服务交互。您需要一个(请参阅api页面上的最后一个回调示例)

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

或者,如果仍在使用服务,您可以在“活动恢复”中注册一个BroadcastReceiver,从服务发送消息。哦,请不要这样做。当您可以使用AlarmManager并在将来设置一段时间时,为什么要使用时间?另外,请不要每分钟都叫醒电话。特别是在这种情况下,如果手机正在唤醒以更新用户看不到的用户界面,这是浪费的工作。你读到时间不会唤醒你的手机吗?另外,用户界面可能希望在倒计时后发送通知。那样的话,你得叫醒电话。根据活动的任务,您可能希望不时唤醒系统并执行一些工作,常见的示例是网络拉动。增量计算+报警可能是最好的解决方案,但很难从问题中分辨出来。如果用户看不到UI,为什么要更新它?如果用户返回时它是如此新鲜,那么至少在用户返回之前进行指数级的更新退避是有意义的,尽管我认为,在绝大多数情况下,这是徒劳的,因为任何单个更新都应该如此快速,以至于用户不会介意在返回应用程序时等待它。