当调用onDestroy()时运行长任务

问题描述:

我想从片段的onDestroy()运行一个长操作任务。我的目标是调用网络调用来删除一些数据,以防用户通过从最近的应用程序中滑动来关闭应用程序。我希望在调用onDestroy()时启动一个intent。当调用onDestroy()时运行长任务

目前,无论何时我尝试初始化意图,在我有机会操作调用之前,由于onDestroy()已经杀死了我的应用程序,所以我放弃了上下文。

我不想使用这个选项:Performing long running operation in onDestroy因为像这样运行一个线程不是正确的做法,而且看起来像一个危险的黑客。

从活动的onDestroy()调用操作导致了相同的错误。

Offcourse,我不想在ui线程上做任何工作,并且在我的操作完成之前“推迟”onDestroy()。

只是为了通关,虽然getContext()不为null,但当我到达SomeService类时,上下文已经为空,因为发送intent是异步操作。

@Override 
    public void onDestroy() { 
     Intent intent = new Intent(getContext(), SomeService.class); 
     getContext().startService(intent); 
     super.onDestroy(); 
    } 

我建议开始,并在绑定的服务比如说onCreate()Activity,然后已结合服务,您可以轻松地开始清理实用程序放置在你的Service,即你要分服务启动和清理的起点。

像:

//somewhere in onCreate() 
myServiceIntent = new Intent(this.getApplicationContext(), MyService.class); 
context.startService(myServiceIntent); 
context.bindService(myServiceIntent, serviceConnection, Context.BIND_AUTO_CREATE); 

,然后在onDestroy()

public void onDestroy() { 
    myService.cleanup(); 
    super.onDestroy(); 
} 

了解更多关于service binding

注意onDestroy()不能保证被调用。

使用应用程序上下文。

只要绑定了任何组件,绑定服务就会一直存在,因此您的启动服务的变体更好,只是在作业完成后不要忘记使用stopSelf()。