Android 服务 onCreate 方法被多次调用而未调用 onDestroy 方法。

15
在我的应用中,我使用一个服务与服务器通信。该服务会生成多个消息队列线程来处理不同优先级的任务。
这种模型已经使用了一年左右,并且没有出现大问题。然而最近,我发现有时候我的服务类的 onCreate 方法会被调用多次。在两次 onCreate 调用之间,onDestroy 从未被调用过。因此,我无法杀死现有的线程。一旦出现这种行为,服务内部就会有重复的线程。
我唯一改变的是将服务作为前台服务运行,当用户登录应用程序时。我想知道前台服务是否导致了这个问题。
有任何想法吗?

同一个问题调用stopSelf()服务后会自动调用onCreate(),多次调用onCreate()方法。 - Kishan Viramgama
3个回答

12

当我的服务使用具有默认属性的活动时,我遇到了同样的问题。但是,当我让我的服务使用另一个进程时,就不再有问题了。我像下面这样编辑了我的AndroidManifest.xml...(添加了 android:process 属性)

<service android:name="kr.co.pkbio.binoo.CacheFileManagerService" android:process=":kr.co.pkbio.binoo.service"/>
<service android:name="kr.co.pkbio.binoo.ActivityStackManagerService" android:process=":kr.co.pkbio.binoo.service"/>

有关信息,请参见http://developer.android.com/guide/topics/manifest/service-element.html


我有一个在不同进程中运行的服务,但偶尔仍然会出现这个问题。 - Sam

0

我在处理蓝牙服务时遇到了完全相同的问题(这个问题发生在开发过程中)。当我断开设备并杀死ADB后,它就不再发生,而onCreate只被调用一次。我认为这是某种错误,因为它偶尔会发生。但也许你有一个稍微不同的问题...


0
这可能对某些人有用。 我在保存一个 bundle 中的 map 时,在一个活动的 onSaveInstanceState 方法中遇到了同样的问题。 我相信这是因为该 map 包含对应用程序其他部分正在使用的对象的引用(其中之一是我的服务),每次离开该活动时,我的服务都会重新启动。 我猜这是 Android 操作系统的恶作剧。

你是怎么解决这个问题的?我也遇到了同样的问题。当我离开主应用程序时,我的服务会重新创建。 - TheRealChx101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接