0

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

目前,每当我尝试启动意图时,我都会在有机会操作调用之前失去上下文,因为 onDestroy() 已经杀死了我的应用程序。

我不想使用这个选项:在 onDestroy 中执行长时间运行的操作,因为这样运行线程不是正确的方法,而且似乎是一种危险的黑客攻击。

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

当然,我不希望在 ui 线程上进行任何工作并“推迟” onDestroy() 直到我的操作完成。

只是为了清除,虽然 getContext() 不为空,但当我到达 SomeService 类时,上下文已经为空,因为发送意图是一个异步操作。

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

2 回答 2

1

我建议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();
}

阅读有关服务绑定的更多信息

于 2016-04-26T08:59:35.497 回答
0

请注意,不保证会调用onDestroy() 。

使用应用程序上下文。

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

于 2016-04-26T09:15:20.833 回答