我正在开发一个应用程序,它基本上在应用程序本身的开始下载大量数据并将其显示在ListActivity中.我打算做的是显示启动画面,直到数据加载完毕.
直到现在我的所有尝试都是徒劳的.我试过anddev.org提到的方法,但我的问题是主Activity应该开始但是Splash Screen应该是可见的,直到我填充我的ListActivity.所以简而言之,我必须完成以下步骤:
希望你明白它是什么样的....
在我的应用程序中,我正在AsyncTask按照Android教程的建议进行一些紧张的工作,并ProgressDialog在我的主要活动中显示:
dialog = ProgressDialog.show(MyActivity.this, "title", "text");
new MyTask().execute(request);
Run Code Online (Sandbox Code Playgroud)
之后MyTask我将结果发回活动:
class MyTask extends AsyncTask<Request, Void, Result> {
@Override protected Result doInBackground(Request... params) {
// do some intense work here and return result
}
@Override protected void onPostExecute(Result res) {
postResult(res);
}
}
Run Code Online (Sandbox Code Playgroud)
在结果发布时,在主要活动中我隐藏了对话框:
protected void postResult( Result res ) {
dialog.dismiss();
// do something more here with result...
}
Run Code Online (Sandbox Code Playgroud)
所以一切都在这里工作正常,但我想以某种方式更新进度对话框,以便能够向用户显示一些真正的进展,而不仅仅是假的"请稍候......"消息.我可以以某种方式访问进度对话框MyTask.doInBackground,完成所有工作吗?
据我所知,它是作为单独的线程运行的,所以我无法与那里的主要活动"交谈",这就是为什么我用它onPostExecute来将结果推回到它.但问题是onPostExecute只有当所有工作都已完成时才调用,我想在做某事的过程中更新对话框的进度.
任何提示如何做到这一点?
嘿伙计们,我在打开一个活动的进度对话框上遇到了问题(在例子中称为活动2).活动2有很多代码要在此OnCreate事件中执行.
final ProgressDialog myProgressDialog = ProgressDialog.show(MyApp.this,getString(R.string.lstAppWait), getString(R.string.lstAppLoading), true);
new Thread() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
showApps();
}
});
myProgressDialog.dismiss();
}
}.start();
Run Code Online (Sandbox Code Playgroud)
showApps函数启动活动2.
如果我在活动1上的按钮点击事件上执行此代码,我会看到进度,但是她没有移动并且在2或3秒内有一个黑屏,以便android显示活动.
如果我在Activity2的OnCreate中执行此代码并且如果我用OnCreate上的代码替换showApps,则Activity1冻结2秒,我没有看到进度对话框,并且在看到结果之前再次冻结活动2上的2秒.
一个主意 ?
我在Android上工作.将有一个菜单,当访问时,从服务器(500+)请求相当大的用户列表,大约需要5秒钟.在此期间,应用程序冻结.我如何显示进度hud(如MBProgressHud),其中用户意识到某些事情正在发生,并且在完成之前无法触及它.
MBProgressHud:
