gpt4 book ai didi

android - stopSelf() vs stopSelf(int) vs stopService(Intent)

转载 作者:IT王子 更新时间:2023-10-28 23:58:19 26 4
gpt4 key购买 nike

调用有什么区别
stopSelf() , stopSelf(int)stopService(new Intent(this,MyServiceClass.class))
onStartCommand() 内?

例如,如果我以这种方式启动相同的服务两次:

...
Intent myIntent1 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent1.putExtra("test", 1);
Intent myIntent2 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent2.putExtra("test", 2);
startService(myIntent1);
startService(myIntent2);
...

并以这种方式实现onStartCommand:

public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this, "onStartCommand called "+intent.getIntExtra("test", 0), Toast.LENGTH_LONG).show();
stopService(new Intent(this,MyAlarmService.class));
return START_NOT_STICKY;
}

这三种方法的行为完全相同,即 onDestroy 只有在 onStartCommand 执行两次后才会被调用。

最佳答案

希望对你有帮助:

已启动的服务必须管理自己的生命周期。也就是说,系统不会停止或销毁服务,除非它必须恢复系统内存并且服务在 onStartCommand() 返回后继续运行。因此,该服务必须通过调用 stopSelf() 来停止自己,或者另一个组件可以通过调用 stopService() 来停止它。

一旦使用 stopSelf() 或 stopService() 请求停止,系统会尽快销毁服务。

但是,如果您的服务同时处理对 onStartCommand() 的多个请求,那么您不应在处理完启动请求后停止服务,因为您可能已经收到了新的启动请求(在结束时停止)第一个请求将终止第二个请求)。为避免此问题,您可以使用 stopSelf(int) 来确保您停止服务的请求始终基于最近的启动请求。

也就是说,当你调用 stopSelf(int) 时,你传递的是你的停止请求对应的启动请求的 ID(传递给 onStartCommand() 的 startId)。那么如果服务在你能够调用 stopSelf(int) 之前收到一个新的启动请求,那么 ID 将不匹配并且服务不会停止。

关于android - stopSelf() vs stopSelf(int) vs stopService(Intent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com