使后台服务始终运行,永远不会自杀或系统销毁它

时间:2015-08-07 16:11:18

标签: java android performance android-service background-process

您好我正在运行后台服务来检查我的服务器是否有新数据。

但如果我杀了App,后台服务也会死掉。 如果我在其上运行后台服务;正在运行,系统会在运行几次后将其终止。

清单

<service
            android:name=".backgroundSerive"
            android:enabled="true"
            android:exported="false"/>

选项2

<service
            android:name=".backgroundSerive"
android:process=":my_process"
            android:enabled="true"
            android:exported="false"/>

MainAActivity - 启动服务

Intent i = new Intent(this, backgroundSerive.class );
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startService(i);

服务

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
...start runnable
        return  START_STICKY; 
    }
  
    

我尝试了两种选择,服务一直被杀死。

  

任何建议。使我的服务器始终运行。 谢谢

2 个答案:

答案 0 :(得分:1)

您需要从服务中调用startForeground(),以降低Android实际杀死它的可能性。请查看此sample以获取示例实现。

答案 1 :(得分:1)

startForeground函数将服务发送到前台,因此android系统将此操作视为前台任务。这不太可能被杀死。

如果您选择服务销毁操作为START_STICKY,它将被销毁,但在销毁之后,应该使用null意图重新初始化。

您可以考虑对此类事件使用警报。 由于警报在内部流程中运行,因此可以减少应用开销,但它们会提供重复检查。