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的服务。。。顺便说一下,在我的应用程序中,活动和服务是完全分开的