当调用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