不可阻挡的服务

时间:2014-12-31 11:17:31

标签: android service

我需要实现一项接受少量数据的服务,并且应该继续工作,直到用户明确停止它为止。当一天完成时,它应该显示一种通知,是否继续进行。我已编码,但在测试时,我注意到它在几分钟后停了好几次。如果再次重新启动,则发生null异常。请提出任何建议。

3 个答案:

答案 0 :(得分:1)

如果您希望服务永久运行,直到用户明确停止,

  • 将服务作为粘性服务:

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
         return Service.START_STICKY;
    }
    
  • 添加广播接收器(清单)以侦听ON_BOOT_COMPLETE事件并在onReceive()方法中启动服务。

    <application>    
        <receiver android:name=".BootCompletedReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
    </application>
    

添加权限android.permission.RECEIVE_BOOT_COMPLETED

通过这些更改,您的服务应该永远运行。

答案 1 :(得分:0)

Android OS可以停止任何Android服务或应用程序来回收资源。你只能建议不要这样做。

最可靠的方法是让您的服务在Foreground中运行,标记为Sticky。但即便是那些也不能保证它会一直运行。系统重启会终止您的服务。

答案 2 :(得分:0)

更好地在单独的进程中启动您的服务或者使用前台服务android.foreground服务也停止在极低的内存问题“使用START_STICKY”重启