是否有任何方式使帐户选择器UI尽可能快地出现

时间:2016-01-10 18:48:49

标签: android google-play-services google-drive-android-api

目前,我正在从 API客户端库for Java 迁移到适用于Android的驱动器API

但是,与适用于Java的API客户端库相比,我意识到来自 Android API的驱动API 的帐户选择器非常慢。 有时,等待时间最多需要5秒。

非常快(适用于Java的API客户端库)

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);

enter image description here

此帐号选择器几乎立即出现。

非常慢(适用于Android的Drive API)

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);
    }
}

enter image description here

通常,当我第一次调用帐户选择器时,需要很长时间才能等待。有时,等待时间可能需要5秒钟。

我了解我们的应用程序代码通过IPC调用Google Play服务。因此,可能会有一些缓慢。但是,我不认为它会慢到5秒钟。

我能做些什么,让帐号选择器UI尽可能快地出现?

2 个答案:

答案 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)。