Run long task when onDestroy() is called
我想从片段中运行onDestroy()的长操作任务。我的目标是呼叫网络呼叫以删除一些数据,以防用户通过从最近的应用程序刷它来关闭应用程序。我希望在调用onDestroy()时启动一个intent。
此刻,每当我尝试启动意图时,我都会在我有机会操作调用之前松开上下文,因为onDestroy()已经杀死了我的应用程序。
我不想使用这个选项:在onDestroy中执行长时间运行的操作,因为运行这样的线程不是正确的方法,而且看起来像是一个危险的黑客。
从活动的onDestroy()调用操作导致相同的错误。
当然,我不希望在ui线程上做任何工作并"推迟"onDestroy()直到我的操作完成。
只是为了清除,当getContext()不为null时,到达SomeService类时,上下文已经为空,因为发送intent是异步操作。
1 2 3 4 5 6 | @Override public void onDestroy() { Intent intent = new Intent(getContext(), SomeService.class); getContext().startService(intent); super.onDestroy(); } |
我建议在
喜欢:
1 2 3 4 | //somewhere in onCreate() myServiceIntent = new Intent(this.getApplicationContext(), MyService.class); context.startService(myServiceIntent); context.bindService(myServiceIntent, serviceConnection, Context.BIND_AUTO_CREATE); |
然后在
1 2 3 4 | public void onDestroy() { myService.cleanup(); super.onDestroy(); } |
阅读有关服务绑定的更多信
请注意,不保证会调用onDestroy()。
使用应用上下文。
只要任何组件绑定到绑定服务,绑定服务就会生效,因此启动服务的变体更好,只是在作业完成后不要忘记使用stopSelf()。