在 Activity 重新启动时将 GoogleApiClient 保存在 Bundle 中

Save GoogleApiClient on Activity restart in Bundle

我的应用程序具有主题更改功能(即 Activity 正在重新启动)。是否有可能以某种方式将 GoogleApiClient 及其所有回调状态和参数保存到 onSaveInstanceState() 中的 Bundle 中,这样我就不需要每次都重建它?

我正在使用 Google Cast Api 客户端(适用于 Chromecast 设备)。

                mApiClient = new GoogleApiClient.Builder(mContext)
                    .addApi(Cast.API, apiOptionsBuilder.build())
                    .addConnectionCallbacks(mConnectionCallbacks)
                    .addOnConnectionFailedListener(mConnectionFailedListener)
                    .build();

            mApiClient.connect();

我发现可以不 disconnect() 这个客户。但在此之后仍然mApiClient = null

我也曾尝试将 mApiClient 设为 savedInstanceState.putParcelable()savedInstanceState.putSerializeble(),但此对象不可打包或序列化。

GoogleApi客户端启动器的完整代码:

 /**
 * Start the receiver app
 */
private void launchReceiver() {
    try {
        mCastListener = new Cast.Listener() {
            @Override
            public void onApplicationDisconnected(int errorCode) {
                Log.d(TAG, "application has stopped");
                teardown();
            }

        };
        // Connect to Google Play services
        mConnectionCallbacks = new ConnectionCallbacks();
        mConnectionFailedListener = new ConnectionFailedListener();
        Cast.CastOptions.Builder apiOptionsBuilder = Cast.CastOptions
                .builder(mSelectedDevice, mCastListener);

        if (mApiClient == null) {
            mApiClient = new GoogleApiClient.Builder(mContext)
                    .addApi(Cast.API, apiOptionsBuilder.build())
                    .addConnectionCallbacks(mConnectionCallbacks)
                    .addOnConnectionFailedListener(mConnectionFailedListener)
                    .build();

            mApiClient.connect();
        }
    } catch (Exception e) {
        Log.e(TAG, "Failed launchReceiver", e);
    }
}

每次主题更改时都重新连接到 Chromecast 设备,这对用户来说不是很友好。有什么解决办法吗?

您应该在 服务中维护 googleapiclient 连接,而不是在 activity 中维护,后者可能会在配置更改期间被终止 。您的主题更改与 apiclient 对象无关。因此,如果您将 UI 和核心逻辑分离以避免此类问题,这是一个很好的做法。