设备轮换期间在哪里停止服务

Where to stop a service during device rotation

当我的 activity 启动时,我会启动一个服务来获取数据,然后将其发送回 activity,以便它可以更新 UI。

如果发生配置更改:

  1. 如果我已经有获取的数据,我将其保存在onSaveInstanceState方法中。
  2. 如果我没有收到提取的数据,我想取消 运行ning 服务并使用新的 activity.
  3. 重新启动它

所以我的 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 的正常启动期间被调用,这是我不知道发生的,所以当 运行 时服务总是被取消。

所以我的问题是:

  1. 这在某处有记录吗?在 activity 启动期间找不到任何地方说 onSaveInstanceState 被调用。
  2. 最好在哪里停止服务? onConfigurationChanged?

谢谢!

您有几个选择:

  1. 不允许 Android 终止并重新启动您的 Activity。自己管理配置更改。通常这很容易做到,并且让您不必处理停止和重新启动后台的事情。

  2. ServiceConnection(或任何您用作 Service 的通信渠道的东西)从旧的 Activity 实例传递到新的 Activity 使用 onRetainNonConfigurationInstance()getLastNonConfigurationInstance()

  3. 实例
  4. 使用 service-bus 架构,这样一个 Activity 可以开始一些事情,另一个 Activity 可以注册回调。

  5. 使用广播IntentService的响应发送到Activity,新的Activity可以在a后看到配置更改。