【发布时间】:2015-08-28 06:06:14
【问题描述】:
我怀疑如果我使用警报管理器启动定期服务并从活动的 onCreate 方法启动服务。如果该活动一次又一次地启动,我如何防止服务多次触发。
【问题讨论】:
-
你能显示代码吗?
标签: android android-intent android-activity android-intentservice
我怀疑如果我使用警报管理器启动定期服务并从活动的 onCreate 方法启动服务。如果该活动一次又一次地启动,我如何防止服务多次触发。
【问题讨论】:
标签: android android-intent android-activity android-intentservice
假设您正在创建一个普通的Service(而不是IntentService),按照Android Service documentation,当应用调用startService 调用时,服务将被实例化并启动(创建一个如果需要,请处理它)。
另外,如果它正在运行,那么它仍然在运行。
所以,简单来说,
“Started”服务的生命周期独立于服务的生命周期 已启动此服务的活动。这是真的,不管 天气都在同一进程或不同进程中运行
因此,即使您的Activity 可能被多次创建,并且如果您之前创建的Service 仍在运行,那么已经存在的服务对象将被重用。
但是,如果从Activity 的onCreate() 调用startService(),这将在每次onStartCommand() 时调用。
因此,您需要确保有适当的代码/逻辑来处理onStartCommand() 的多次调用
【讨论】:
据我了解,您必须在 onCreate/onStart 和 onStop 或 onResume 和 onPaused 中执行某些操作。我的意思是,在 onCreate 中创建您需要的内容、警报管理器等,然后在 onStart 中启动服务,在 onStop 中停止服务或取消绑定,以防您需要前台服务。或在 onResume 或 onStop 中。
看看这里:
https://github.com/toaderandrei/live_tracking/blob/master/app/src/main/java/com/ant/track/activities/ServiceConnectActivity.java.
这是一个基于谷歌 MyTracks 应用的跟踪应用。
【讨论】: