在 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 和核心逻辑分离以避免此类问题,这是一个很好的做法。
我的应用程序具有主题更改功能(即 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 和核心逻辑分离以避免此类问题,这是一个很好的做法。