设备轮换期间在哪里停止服务
Where to stop a service during device rotation
当我的 activity 启动时,我会启动一个服务来获取数据,然后将其发送回 activity,以便它可以更新 UI。
如果发生配置更改:
- 如果我已经有获取的数据,我将其保存在
onSaveInstanceState
方法中。
- 如果我没有收到提取的数据,我想取消 运行ning 服务并使用新的 activity.
重新启动它
所以我的 onSaveInstanceState
目前看起来像这样:
@Override
public void onSaveInstanceState (Bundle outState) {
if (data != null) {
outState.putSerializable(DATA_IN_BUNDLE, data);
}
// Stop any data fetching that may be going on.
stopService(new Intent(this, FetchService.class));
}
但是,我注意到这个方法在 activity 的正常启动期间被调用,这是我不知道发生的,所以当 运行 时服务总是被取消。
所以我的问题是:
- 这在某处有记录吗?在 activity 启动期间找不到任何地方说
onSaveInstanceState
被调用。
- 最好在哪里停止服务?
onConfigurationChanged
?
谢谢!
您有几个选择:
不允许 Android 终止并重新启动您的 Activity
。自己管理配置更改。通常这很容易做到,并且让您不必处理停止和重新启动后台的事情。
将 ServiceConnection
(或任何您用作 Service
的通信渠道的东西)从旧的 Activity
实例传递到新的 Activity
使用 onRetainNonConfigurationInstance()
和 getLastNonConfigurationInstance()
实例
使用 service-bus 架构,这样一个 Activity
可以开始一些事情,另一个 Activity
可以注册回调。
使用广播Intent
将Service
的响应发送到Activity
,新的Activity
可以在a后看到配置更改。
当我的 activity 启动时,我会启动一个服务来获取数据,然后将其发送回 activity,以便它可以更新 UI。
如果发生配置更改:
- 如果我已经有获取的数据,我将其保存在
onSaveInstanceState
方法中。 - 如果我没有收到提取的数据,我想取消 运行ning 服务并使用新的 activity. 重新启动它
所以我的 onSaveInstanceState
目前看起来像这样:
@Override
public void onSaveInstanceState (Bundle outState) {
if (data != null) {
outState.putSerializable(DATA_IN_BUNDLE, data);
}
// Stop any data fetching that may be going on.
stopService(new Intent(this, FetchService.class));
}
但是,我注意到这个方法在 activity 的正常启动期间被调用,这是我不知道发生的,所以当 运行 时服务总是被取消。
所以我的问题是:
- 这在某处有记录吗?在 activity 启动期间找不到任何地方说
onSaveInstanceState
被调用。 - 最好在哪里停止服务?
onConfigurationChanged
?
谢谢!
您有几个选择:
不允许 Android 终止并重新启动您的
Activity
。自己管理配置更改。通常这很容易做到,并且让您不必处理停止和重新启动后台的事情。将
ServiceConnection
(或任何您用作Service
的通信渠道的东西)从旧的Activity
实例传递到新的Activity
使用onRetainNonConfigurationInstance()
和getLastNonConfigurationInstance()
实例
使用 service-bus 架构,这样一个
Activity
可以开始一些事情,另一个Activity
可以注册回调。使用广播
Intent
将Service
的响应发送到Activity
,新的Activity
可以在a后看到配置更改。