Android:本地服务是否可以独立于应用程序而被操作系统杀死?

时间:2016-12-13 09:04:36

标签: android android-service android-lifecycle

我以前认为Android操作系统只能杀死整个应用程序进程,但最近有人告诉我,在某些情况下,操作系统也可以在保持{{1}的同时终止Service完好无损。

所以,我的问题是:假设我在与我的Android应用程序的其余部分相同的进程中启动(使用Application)本地startService,这可能会被操作系统Service杀死独立于应用程序的其余部分(即Service被杀死并被销毁,但Service对象保持不变??

如果可能出现这种情况,那么什么条件会影响Application被杀的可能性?我可以防止这种情况发生吗?

请使用参考和/或“概念证明”代码段来支持您的答案。

2 个答案:

答案 0 :(得分:0)

我从来没有听说Android会破坏流程的特定组成部分而不是整个流程,而且从未在实践中发现过这种情况。相反,Android会分析您的应用程序组件的状态,以确定您的进程是否可能被杀死以回收内存。查看文档 - Processes and Threads了解详细信息 - 文档没有说明是否会破坏特定组件。

此外,有一篇好文章Who lives and who dies,作者明确指出 Android只会杀死进程,而不是组件,但遗憾的是,没有进化这个主题。

顺便说一下,您在哪里阅读/了解Service可能会在整个过程中被杀死的某些情况?

答案 1 :(得分:-1)

Service独立于Application。有两种方法可以处理Service被杀死

  1. START_STICKY
  2. 如果您在START_STICKY中返回onStartCommand(),系统会在杀死服务后尝试重新创建您的服务。同样的意图将通过。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }
    
    1. Foreground Service
    2.   

      前台服务是一种服务,被认为是用户积极意识到的东西,因此在内存不足时不会被系统杀死。

      onStartCommand()中拨打startForeground()以在前台启动Service,但会显示状态栏的通知

      Notification notification = new Notification(R.drawable.icon, 
              getText(R.string.ticker_text), System.currentTimeMillis());
      Intent notificationIntent = new Intent(this, ExampleActivity.class);
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
      notification.setLatestEventInfo(this, getText(R.string.notification_title),
              getText(R.string.notification_message), pendingIntent);
      startForeground(ONGOING_NOTIFICATION_ID, notification);