【发布时间】:2011-10-18 13:37:17
【问题描述】:
我有问题。我有一个异步任务,我在其中连接到 Web 服务,带来数据并将其放入数据库中。没关系,它有效。但是我有一个问题,我想在点击 REFRESH 后放一个进度条(那是我做网络服务的时候)..
当我刷新时,我的屏幕冻结需要 2 秒钟,然后进度条会稍微启动,然后消失,但任务是在进度条启动之前完成的。
这是异步任务的代码
private class tareaActualizar extends AsyncTask<Void, Void, Boolean> {
private static final String DEBUG_TAG = "actualizo";
private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this);
@Override
protected void onCancelled() {
Log.i(DEBUG_TAG, "onCancelled");
pd.dismiss();
}
@Override
protected void onPostExecute(Boolean result) {
Log.i(DEBUG_TAG, "onPostExecute");
pd.dismiss();
}
@Override
protected void onPreExecute() {
pd.setMessage("Actualizando...");
pd.show();
}
@Override
protected void onProgressUpdate(Void... values) {
}
@Override
protected Boolean doInBackground(Void... params) {
webService();
tv2 = resultado.toString(); //Obtengo el string resultado del WebService en tv2
//Obtengo la hora actual
insertoEnBD();
// Inserto en base de datos (Si es que pase por el Web Service)
Boolean res = true;
return res;
}
}
Webservice是webservice的连接方式,“InsertoBD”是我将数据放入数据库时..谢谢
【问题讨论】:
-
我没有看到你的 AsyncTask 实现有什么问题,你怎么知道你的任务在进度条开始之前完成了。根据您的描述,除了 2 秒的冻结之外,我想说这是我对您的 AsyncTask 的期望:进度条显示 -> 任务快速完成 -> 进度条已关闭。
-
因为我的 ui 被刷新并更改了数据.. 在我看到进度条开始之后..
-
我建议注释掉 doInBackground() 中的所有代码,然后简单地执行 Log.i(TAG, "do something") 以查看 UI 刷新是否实际上来自您的 doInBackground()。通过这样做,您还可以检查 Logcat 以查看是否在 onPreExecute() 之后调用了 doInBackground()。我猜你的代码中可能有其他地方在主线程中执行相同的繁重任务,这解释了单击刷新按钮时 2 秒冻结。
标签: android progress-bar android-asynctask