Java 如果活动被终止,服务会发生什么情况?

Java 如果活动被终止,服务会发生什么情况?,java,android,multithreading,service,broadcastreceiver,Java,Android,Multithreading,Service,Broadcastreceiver,我有一个服务,当新的来电到达时,它从广播接收器开始。在该服务中我启动一个新的线程并在那里完成所有工作。如果我的应用程序的主活动被终止,会发生什么情况?我这样问是因为我意识到在这种情况下,服务的startID上升了一倍!就像再次调用服务的onStartCommand()之类的东西一样。我将举一个简短的例子: 主要活动在后台某处运行,传入呼叫到达,服务启动,stopSelf()由用户操作调用,服务被销毁 Main Activity正在运行,来电到达,Service启动,Main Activity通过

我有一个
服务
,当新的来电到达时,它从
广播接收器
开始。在该
服务中
我启动一个新的
线程
并在那里完成所有工作。如果我的应用程序的
主活动
被终止,会发生什么情况?我这样问是因为我意识到在这种情况下,
服务的
startID
上升了一倍!就像再次调用
服务
onStartCommand()
之类的东西一样。我将举一个简短的例子:

  • 主要活动
    在后台某处运行,传入呼叫到达,
    服务
    启动,
    stopSelf()
    由用户操作调用,
    服务
    被销毁
  • Main Activity
    正在运行,来电到达,
    Service
    启动,
    Main Activity
    通过清除最近的应用列表被终止,
    stopSelf()
    由用户操作调用,
    Service
    未被销毁,因为
    startID
    不匹配
  • Main Activity
    未运行(通过清除最近的应用列表而终止),来电到达,
    Service
    启动,
    stopSelf()
    被用户操作调用,
    Service
    被销毁
  • 这很奇怪,因为当
    主活动
    被终止时,
    startID
    会以某种方式更改其值。我在我的
    服务
    onStartCommand()
    方法中使用
    START\u NOT\u STICKY
    ,因此无法使用新的
    startID
    重新创建
    服务。有人能给我解释一下吗?当
    主活动
    被终止时,运行服务的
    服务
    或单独的
    线程
    会发生什么情况?提前谢谢

    从“最近”中删除活动并不会杀死它。如果传入呼叫广播导致“startService”呼叫,则服务的“onStartCommand”将在没有问题的情况下再次调用()


    因此,在#2中,您可能认为您的活动“死亡”,但它没有死亡,而且由于每次调用onstartcid命令时startId都会更改,因此下一个启动服务的请求将与以前的任何startId都不匹配。这是预期的行为。

    活动不会被“杀死”。如果用户按下返回键,您调用
    finish()
    ,等等,活动将被销毁。进程将被终止(也称为终止),用户操作(例如,将应用程序从最近的任务列表中清除)或操作系统需要释放系统RAM。但是如果我的服务与我的活动在同一进程中运行,在这种情况下,进程会被扼杀吗?因为现在不是了。服务会继续运行并变得不可阻挡,因为
    startID
    s不匹配…”“但是如果我的服务与我的活动在同一进程中运行,在这种情况下会终止该进程吗?”--服务不会阻止进程终止。与其他进程相比,当操作系统需要释放系统RAM时,它降低了杀死它的优先级。但是你的进程仍然可以被用户操作杀死,但事实并非如此。即使主活动被破坏,流程仍会运行,服务也会变得不可阻挡。请阅读我提供的例子。我想你误解了我。在#2中,服务没有运行,比如说startid为0,然后调用到达,然后服务启动,startid为1,然后我清除最近的活动,不知何故startid值更改为2。没人打电话给我,但不知怎的它变成了2。即使是日志也显示为1,但在清除最近的内容后,我只能停止startid值为2的服务。。。顺便说一下,在我的应用程序中,活动和服务是完全分开的