【问题标题】:restarting the service after manually killing it手动杀死服务后重新启动服务
【发布时间】:2014-05-27 06:00:18
【问题描述】:

如果它被用户手动杀死,我想在 android 中启动服务,我已经阅读了很多关于这个以及我在我的服务中使用的内容

我的服务定期获取当前用户位置,它是一项 START_STICKY 服务。正如我所读到的,whatsapp 正在使用GCM 再次打开服务,如果它被用户手动杀死,所以我也实现了GCM 并启用了服务。

但是如果我手动终止了我的服务,那么GCM 也会停止(这是一个明显的原因),所以我认为whatsapp 正在使用GCM 重新启动他们的神话自己的服务,whtsapp的背后没有魔法。

我尝试通过从onDestroy 调用startService 来重新启动服务,但这也不起作用。

我也尝试通过使用进程属性将服务作为单独的进程运行,但它没有效果

如果服务被用户自己杀死,还有什么方法可以立即重启服务

注意:我已经知道如果服务被用户手动杀死,如果服务是START_STICKY

,操作系统会很快自动重启它

【问题讨论】:

    标签: android android-service


    【解决方案1】:

    实际上,如果任何用户手动停止应用程序服务,它在任何时候都不会停止,因为 AlarmManager 它会在很短的时间内启动。使用警报管理器而不是 START_STICKY 标志。 您的服务在被用户杀死后自动启动。检查链接: http://androidsamplecodes4u.blogspot.in/2012/08/start-service-with-alarm-manager-android.html

    【讨论】:

    • 如果我手动终止服务,我的 AlaramManager 将如何知道何时重新启动,因为它可能会被应用程序本身附加的进程杀死
    • 你检查过上面的链接示例吗?有未决使用意向。在待定意图中,如果您将间隔设置为 1 mnt 并设置 alrmmngr.setrepeating(...,pendingintent) 则必须在该间隔之后设置服务调用间隔,然后每 1 mnt 后调用服务...
    【解决方案2】:

    在您的服务中覆盖此方法希望它有效

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Intent restartService = new Intent(getApplicationContext(),
                this.getClass());
        restartService.setPackage(getPackageName());
        PendingIntent restartServicePI = PendingIntent.getService(
                getApplicationContext(), 1, restartService,
                PendingIntent.FLAG_ONE_SHOT);
    
        //Restart the service once it has been killed android
    
    
        AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +1000, restartServicePI);
    
    }
    

    【讨论】:

    • link 参考这个
    • 您认为警报管理器会保持活动状态来触发此服务吗?
    猜你喜欢
    • 2013-12-31
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多