Service中运行Async task,任务结束后会自动调用stopSelf吗?
问题解答
AsyncTask执行完成后,Service不会自动调用stopSelf()方法。
Android系统不会监控Service内部启动的异步任务的执行状态,Service的生命周期和其内部子任务的生命周期是完全独立的。只有满足以下两种情况时,系统才会自动销毁Service:
- 所有绑定该Service的客户端都完成解绑,且该Service从未被
startService()方法启动过 - 系统内存资源紧张,优先级较低的后台Service被系统主动回收释放资源
你当前的代码在onStartCommand()中启动AsyncTask后直接返回了START_STICKY,这意味着Service会一直保持后台运行状态,即便AsyncTask执行完成,Service也会持续驻留后台,直到你主动调用stopSelf()方法,或者由其他组件调用context.stopService()方法主动终止该Service。
如果你需要AsyncTask执行完成后自动结束Service,可以修改逻辑,将onStartCommand()中拿到的startId传递给AsyncTask,在AsyncTask的onPostExecute()回调中调用stopSelf(startId)即可。这种写法可以避免多个启动请求存在时,前一个任务结束提前终止Service的问题。
以下是你提供的代码示例:
public class BackgroundService extends Service { private final IBinder mBinder = new Binder(); @Override public void onCreate() { } @Override public int onStartCommand(Intent intent, int flags, int startId) { new AsyncMethod().execute(); return START_STICKY; } @Override public IBinder onBind(Intent intent) { return mBinder; } }
内容的提问来源于stack exchange,提问作者Adam Davies
相关产品推荐
相关产品推荐

