通过Application Start vs BOOT_COMPLETED启动服务

时间:2013-06-11 20:20:50

标签: android android-service

我确定这是一个非常常见的问题,但没有看到有关如何完成以下任何问题。

我创建了一个每5分钟运行一次的服务,并在设备完成BOOT_COMPLETE后调用,这样就可以了。

我遇到的问题是当我在设备上进行调试时,我必须重新启动手机才能启动服务。有没有办法让我启动这个在Application Startup上每5分钟运行一次的后台服务。

所以我需要的是检查服务是否正在运行,如果它没有启动它。

为了进一步详细说明,这项服务可以获取网络数据,因此BOOT_COMPLETE启动它的理想情况非常有效。但是在用户下载应用程序并启动它的情况下,此服务将不会被启动,因此我需要一种手动启动方式。如果服务没有运行,如果用户刚安装它就不会运行,我需要启动它。

3 个答案:

答案 0 :(得分:2)

我实际上是通过使用以下链接中使用的方法解决了我的问题。

How to send and receive broadcast message

从Manifest中删除IntentFilter并手动调用它。希望这有助于其他人。

    if(!isMyServiceRunning()) {
        Intent intent = new Intent(mContext, OnBootReceiver.class);
        sendBroadcast(intent); 
    }

答案 1 :(得分:1)

您可以使用adb shell手动启动服务。见How to start and stop android service from a adb shell?

命令是:

am startservice com.your.package/.ServiceClassName

根据Android版本的不同,有效语法可能略有变化,例如:

am startservice -n com.your.package/.ServiceClassName
am startservice -a com.your.package/.ServiceClassName
am startservice --user 0 -n com.your.package/.ServiceClassName

答案 2 :(得分:1)

听起来你想要做一个由BOOT_COMPLETE事件

启动的粘性服务

http://developer.android.com/reference/android/app/Service.html#START_STICKY

对于开发,您可以向服务添加另一个intent过滤器以启动它,以便您可以在每次更新代码后从命令行通过活动管理器手动触发它,而无需重新启动设备。