在我的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);
}
}
答案 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