Android Java服务和定时器/线程睡眠
基本上,我需要编写的代码很简单,但作为一名初学者,我仍然对服务、IntentService、创建一个与主活动/UI线程分离的新线程等感到困惑。我将首先解释任务,然后,我认为如何最好地实现这一点 任务 主活动/UI有两个按钮,开始和停止。应用程序应循环执行两个任务,TaskA和TaskB。按下Start时,执行循环。循环包含以下步骤-Android Java服务和定时器/线程睡眠,android,service,timer,sleep,intentservice,Android,Service,Timer,Sleep,Intentservice,基本上,我需要编写的代码很简单,但作为一名初学者,我仍然对服务、IntentService、创建一个与主活动/UI线程分离的新线程等感到困惑。我将首先解释任务,然后,我认为如何最好地实现这一点 任务 主活动/UI有两个按钮,开始和停止。应用程序应循环执行两个任务,TaskA和TaskB。按下Start时,执行循环。循环包含以下步骤- 在主活动的UI上更新状态:“TaskA在60秒内执行” 等待60秒 更新状态…:“任务A正在执行” 执行任务A 更新状态…:“TaskB在120秒内执行” 等120
IntentService
专为事务性工作而设计:做几秒钟或几分钟的工作,然后离开。你需要的是能无限期运行的东西
我是否可以创建一个完全独立于主活动/UI线程的IntentService,以便它不依赖于主活动的生命周期或线程
IntentService
通常与进程的主应用程序线程关系不大
更好的解决方案是定期的服务
。使用标准JavaScheduledExecutorService
处理事件的计时并在后台线程上触发它们的工作。在服务的onStartCommand()
中启动该工作,由活动的startService()
调用触发。在服务的ondestory()
中停止该工作,该工作由活动的stopService()
调用触发。在startService()
和stopService()
之间,您的服务将运行。。。至少有一段时间
如果您的轮询周期更长,最好使用
AlarmManager
,并让它在该事件点及时控制。这样,您的服务就不会一直阻塞内存。目前来看,如果用户不重视您的服务,他们很可能会终止您的应用程序。时间从60秒到24小时不等,因此我想我将使用该服务执行AlarmManager并释放内存。我的第二个问题是,当按下Home按钮时,该活动是否仅接收onPause()、onPause()+onStop()或onPause()+onStop()+onDestroy()?因为我想确保活动不会被破坏,如果它被破坏,我将无法停止服务,因为变量中的服务ID将丢失?对吗?@GBA:“所以我想我将使用该服务来执行AlarmManager并释放内存”--更重要的是,您将使用AlarmManager
来执行服务。如果您希望这些事件在设备处于睡眠状态时发生,您可能需要myWakefulIntentService
或类似服务:“因为我想确保活动不会被破坏”——您的活动不会永远存在。“我将无法停止服务,因为变量中的服务ID将丢失?”--服务没有ID。在主活动收到暂停或停止后,alarm manager仍将执行服务吗?-也就是说,活动现在处于后台,因为用户按下“开始”并最小化应用程序以继续执行其他任务,或者返回主屏幕以锁定手机。@GBA:“在主活动收到暂停或停止后,alarm manager还会执行服务吗?”-->code>AlarmManager
将继续处理您请求的事件,直到您告诉它停止(或用户强制关闭)。完美。非常感谢。如果我有更多的问题,我会留下这个帖子。感谢您目前的帮助。:)