在我的Android应用程序中,我需要执行一些操作,比如在内部存储中创建一些文件,并在应用程序启动时从服务器下载一些数据。只有完成这些操作后,应用程序的其余部分才能正常工作。因此,我打算在打开应用程序时显示图像和进度条,在完成所有这些操作后,将打开一个新活动。
现在,我知道将可能长时间运行的操作(例如下载和文件读/写)放入异步任务中是很常见的。但是,就我而言,在这些操作完成之前我无法继续,所以我是否需要使用异步任务,或者在这种情况下应用程序是否可以阻止?
或者我应该使用get()方法启动异步任务然后等待它吗?
感谢您的建议,我真的很想以正确的方式做到这一点。
答案 0 :(得分:1)
您需要将其置于异步任务或其他线程中。主ui线程上的Internet请求将在最新的(android 4+)系统上产生致命错误。
显示加载图像或进度对话框总是比显示悬挂的白色屏幕更好。
对于所有长时间阻止作业,需要异步。
如果您将启动画面作为主要活动,请为异步任务添加此代码:
private class YourTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
//Do your work here
//Note that depending on the type of work, you can change the parameters
//of the async task.
return count;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
//Put here the code when your job is done, for example:
//start a new activity (your real main activity).
}
}
之后,在活动的oncreate
方法中,调用
new YourTask ().execute(url1, url2, url3);
答案 1 :(得分:1)
你关心创建一个应该是你的启动器活动的启动活动。
然后在splah中,启动一个异步任务下载和所有,然后在完成任务后,您可以移动到您想要的活动。
您也可以使用线程来实现此目的;在这种情况下,您需要使用处理程序或runOnUIThread机制来处理任务完成回调。
最好为此使用Async任务。