【发布时间】: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