目前,我正在从 API客户端库for Java 迁移到适用于Android的驱动器API
但是,与适用于Java的API客户端库相比,我意识到来自 Android API的驱动API 的帐户选择器非常慢。 有时,等待时间最多需要5秒。
private static final GoogleAccountCredential googleAccountCredential = GoogleAccountCredential.usingOAuth2(context,
Arrays.asList(
DriveScopes.DRIVE_APPDATA,
// Legacy. Shall be removed after a while...
DriveScopes.DRIVE
)
);
startActivityForResult(googleAccountCredential.newChooseAccountIntent(), RequestCode.REQUEST_ACCOUNT_PICKER_LOAD_FROM_CLOUD);
此帐号选择器几乎立即出现。
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context)
.addApi(Drive.API)
.addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.i(TAG, "GoogleApiClient connection failed: " + result.toString());
if (!result.hasResolution()) {
// show the localized error dialog.
GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
return;
}
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
} catch (SendIntentException e) {
Log.e(TAG, "Exception while starting resolution activity", e);
}
}
通常,当我第一次调用帐户选择器时,需要很长时间才能等待。有时,等待时间可能需要5秒钟。
我了解我们的应用程序代码通过IPC调用Google Play服务。因此,可能会有一些缓慢。但是,我不认为它会慢到5秒钟。
我能做些什么,让帐号选择器UI尽可能快地出现?
答案 0 :(得分:2)
正如https://stackoverflow.com/a/34706726/72437
中@seanpj所描述的那样startActivityForResult(AccountPicker.newChooseAccountIntent(null,
null, new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, null, null, null, null),
REQ_ACCPICK);
会快得多。
其中一个原因是,它不会在弹出对话框中显示您的个人资料图片。我相信那些个人资料图片需要网络活动,这会使这个过程变慢。
答案 1 :(得分:1)
请尝试以下操作(我不使用addScope
):
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Drive.API)
.build();
帐号选择器显示得很快(我的手机:摩托罗拉,API 16)。