我正在为 Android 编写一个应用程序,它应该在启动后立即从服务器获取一些数据。
在应用程序启动和服务器响应(或超时,如果服务器关闭)之间,应用程序应该显示“等待”动画。
此后,应该显示正常面板(如果服务器响应)或显示错误对话框(如果服务器没有响应)。
把这个逻辑放在什么地方?
MainActivity.onCreate
还是其他地方?
我正在为 Android 编写一个应用程序,它应该在启动后立即从服务器获取一些数据。
在应用程序启动和服务器响应(或超时,如果服务器关闭)之间,应用程序应该显示“等待”动画。
此后,应该显示正常面板(如果服务器响应)或显示错误对话框(如果服务器没有响应)。
把这个逻辑放在什么地方?
MainActivity.onCreate
还是其他地方?
如果您希望仅在应用程序第一次启动时加载数据,那么onCreate()
是正确的地方。如果您想在每次应用程序成为焦点(即前景)时重新加载,那么onResume()
就是正确的位置。查看有关活动生命周期的文档以获取详细信息。
您需要查看AsyncTask
或Loader
+AsyncTaskLoader
以了解在后台执行某些操作的正确模式,然后使用结果更新 UI。
正如杰弗里最初建议的那样,您必须确定何时要连接到服务器?根据这一点,您应该在onCreate
或中连接到服务器onResume
。
现在您必须记住一件事,您不能在 manin GUI 线程中执行繁重的任务。否则很有可能ANR
。所以你必须在不同的线程中实现这个特性。为此,您可以使用不同Thread
的Handler
或AsyncTask
。你可以在这里找到一个不错的文档
我认为使用 AsyncTask 是一个合适的情况。所以这是一个 AsyncTask 的例子
private class ServerCommunication extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// show the connecting screen
// or you can do this before calling asyncTask
}
@Override
protected Void doInBackground(Void... params) {
// communicate with server
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// show the second screeen
}
}
并使用
ServerCommunication pcd = new ServerCommunication();
pcd.execute();
这只是为了建议结构。您绝对可以使用必要的参数或其他方法。