在设备轮换期间停止服务的位置

时间:2017-02-01 14:28:57

标签: android android-service android-lifecycle

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

如果发生配置更改:

  1. 如果我已经获取了数据,请将其保存在onSaveInstanceState方法中。
  2. 如果我还没有收到提取的数据,我想取消正在运行的服务并使用新活动重新启动它。
  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));
    }
    

    但是,我注意到这个方法是在活动正常开始时调用的,我不知道发生了什么,所以当它运行时,服务总是被取消。

    所以我的问题是:

    1. 这是在某处记录的吗?无法找到在活动开始时调用onSaveInstanceState的任何地方。
    2. 停止服务的更好的地方是什么? onConfigurationChanged
    3. 谢谢!

1 个答案:

答案 0 :(得分:1)

您有几个选择:

  1. 不允许Android杀死并重新启动Activity。自己管理配置更改。通常这很简单,可以防止你不得不处理停止和重新启动背景的事情。

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

  3. 使用服务总线架构,以便一个Activity可以启动某个内容而另一个Activity可以注册回调。

  4. 使用广播ServiceActivity的回复发送到Intent,在配置更改后,新的Activity可以看到该回复。< / p>