【问题标题】:Save GoogleApiClient on Activity restart in Bundle在 Bundle 中的 Activity 重启时保存 GoogleApiClient
【发布时间】:2015-06-12 10:56:49
【问题描述】:

我的应用程序具有主题更改功能(即 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(),但此对象不可打包或可序列化。

GoogleApiClient 启动器的完整代码:

 /**
 * 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 设备并不是真正的用户友好。有什么解决办法吗?

【问题讨论】:

  • 您可以在一个类中扩展应用程序,并在其方法中管理状态。这将只创建一次,只需检查保存的 Bundle 值并采取相应措施!
  • @AndroidLearner 我不太明白它是如何工作的。您能否发布一个示例作为答案,以便我尝试一下?

标签: android serialization parcelable google-cast


【解决方案1】:

您应该在服务中维护 googleapiclient 连接,而不是在配置更改期间可能被终止的活动中。您的主题更改与 apiclient 对象无关。因此,最好将 UI 和核心逻辑解耦以避免此类问题。

【讨论】:

  • 嗯,这很有趣。我会试试这个,让你知道它是否有效。
  • 如果我的回答对您有帮助,请发布更新,这可能对其他人也有帮助,也请接受我的回答。
  • 哦,对不起。第一次这样做:)
  • 不用担心,只是这么想。谢谢:-) 很高兴我的回答对你有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2013-11-24
  • 2017-03-06
  • 2021-04-02
  • 2023-03-27
  • 2013-08-18
相关资源
最近更新 更多