用户端点的第一次连接在Android中使用app Engine需要很长时间

时间:2014-05-29 17:00:50

标签: android google-app-engine google-cloud-endpoints

在我的Android应用程序中,经过一段时间(一小时左右......未确定),与Google-AppEngine的连接和响应需要很长时间,例如10秒或更长时间。
在第一次连接之后,所有其他enpoint请求都很快完成,这就是为什么我认为这是SW问题而不是互联网连接问题。
我应该在应用程序加载时建立“虚拟”连接吗? 以下是AsyncTask的示例代码,该代码试图从User entity获取AppEngine endpoint

private class getUser extends AsyncTask<Void, Void, Boolean> {

    long mTaskUserId = Constants.USER_ID_NO_ID_INFDICATOR;
    String mIdInPlatform = Constants.USER_ID_NO_ID_INFDICATOR.toString();
    Long mServerScore;
    Context mContext;
    String mUserName;

    getUser(String idInPlatform, String userName, Context c) {
        mIdInPlatform = idInPlatform;
        mUserName = userName;
        mContext = c;
    }

    @Override
    protected Boolean doInBackground(Void... params) {

        Userendpoint.Builder builder = new Userendpoint.Builder(
                AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null);
        builder = CloudEndpointUtils.updateBuilder(builder);
        Userendpoint endpoint = builder.build();

        try {
            User user = endpoint.getUser().execute();
        } catch (IOException e) {
            Log.e(TAG, "Error getting user details from server ", e);
            return false;
        }
        this.mUserName = user.getUserName();
        this.mServerScore = user.getScore();
        this.mTaskUserId = user.getId();

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            setUserFacebookIdInPreferences(mIdInPlatform, mContext);
            setUserIdInPreferences(this.mTaskUserId, mContext);
            setScoreInPreferences(this.mServerScore, mContext);
            setUserNameInPreferences(this.mUserName, mContext);
        } else {
            Toast.makeText(mContext, R.string.string_login_failed, Toast.LENGTH_SHORT).show();
        }
        // Restart login activity.
        moveToLoginActivity(result);
        super.onPostExecute(result);
    }
}

2 个答案:

答案 0 :(得分:1)

您在Google App Engine中的应用程序使用两种类型的服务器实例:动态实例和常驻实例。不同之处在于,根据需要创建动态实例以提供流量请求。常驻实例始终开启。

当流量停止时,所有动态实例都将关闭以节省资源(并帮助您节省资金)。请求第一次到达服务器时,新的动态实例将分离以提供该请求。启动新实例的过程可能需要一些时间。

这很可能是您在申请中看到的内容。为了避免这种初始延迟,您可以做两件事:

1)优化代码加载所需的时间。 2)设置Resident实例。

您可以在此处找到有关Google文档的更多信息:

https://developers.google.com/appengine/docs/adminconsole/instances#Introduction_to_Instances

答案 1 :(得分:0)

您可以预热实例,以便在任何查询到达之前让它们恢复正常生效 - 为您节省10秒的延迟时间。请参阅以下文档:

https://developers.google.com/appengine/docs/adminconsole/instances#Warmup_Requests