我有一个已经实现了onTaskRemoved()
方法的服务。
当使用startService()
启动服务时,当应用程序通过滑动从最近应用程序列表中删除时,会调用onTaskRemoved()
函数。
但是如果服务是用bindService()
启动的,那么onTaskRemoved()
永远不会被调用。
当应用程序在bindService()
启动后从最近应用程序列表中删除时,我如何使服务调用onTaskRemoved()
?
如果以
开头,Android调用以下生命周期方法:1. bindService():
Activity﹕ onCreate()
CustomService﹕ onCreate()
CustomService﹕ onStart()
CustomService﹕ onStartCommand()
CustomService﹕ onBind()
// Here we swipe to remove app from recent-apps-list
CustomService﹕ onTrimMemory()
2. startService():
ActivityA﹕ onCreate()
CustomService﹕ onCreate()
CustomService﹕ onStart()
CustomService﹕ onStartCommand()
CustomService﹕ onBind()
// Swipe to remove app from recent-apps-list
CustomService﹕ onTrimMemory()
CustomService﹕ onTaskRemoved() // <=====
CustomService﹕ onUnbind()
服务可以被绑定或启动,也可以同时启动。这取决于你如何实现onStartCommand
和onBind
。
但是如果你想让你的服务既保持在本地,又通过IBinder与客户端通信,那么只需启动服务,然后绑定到它。
startService(new Intent(context, CustomerService.class));
// Bind to the service
bindService(new Intent(context, CustomerService.class),
mConnection, Context.BIND_AUTO_CREATE);
编辑20220314。os的未来版本;当没有通知卡供用户与服务交互时,可能会终止服务。
…自从我回答这个问题以来,很多事情都发生了变化,我最近投票了,所以我在这里。你希望你的服务在后台运行,有一个通知,并有一种方式让用户在通知中与服务交互。你已经看到了音乐和视频通知的播放暂停控制。如果没有通知,操作系统可能会终止您的服务。