延迟任务并显示进度条

时间:2013-05-21 09:26:54

标签: android

我似乎要围成一圈。 我有一些代码甚至在Galaxy S3上运行需要几秒钟。拖拽数据库中的数据。 我想在此周围添加一个进度条弹出窗口(旋转圆圈),以便为用户提供应用程序正在执行的操作。 我在应用程序的其他地方尝试了Asyntasks并且工作正常但是对于这种类型,主UI不等待Asyntask在继续之前完成,因此被调用的新活动没有它需要的所有数据并且崩溃。

AsyncTask是解决这个问题的最佳方法,还是有一种更方便的方法来调整主Activity,显示一个进度条,然后在完成长deley后再继续。

感谢您的时间

更新

public class UpdateDetailsAsyncTask extends AsyncTask<Void, Void, Boolean> {   

    private Context context;
    private TaskCallback callback;

    private ArrayList<Object> object;

    private ProgressDialog progress; 

    public UpdateDetailsAsyncTask (
            Context pContext, 
            ArrayList<Object> pObject,
            TaskCallback pCallback) {

        context = pContext;
        callback = pCallback;
        object = pObject;

    }

    @Override
    protected void onPreExecute() {

        Log.i("AsyncTask", "onPreExecuted");

        progress = new ProgressDialog(context);
        progress.setMessage(context.getResources().getString(R.string.loading));
        progress.show();

    }

    @Override
    protected Boolean doInBackground(Void... params) {

        Log.i("Archery", "AsyncTask Excuted");
        Log.i("Archery Scorepad", "Building Continue Round Details");

        // Save Data to Database

        return true;

    }


    protected void onPostExecute(Boolean result) {

        Log.i("AsyncTask", "onPostExuted");

        progress.dismiss();

        callback.startNewActivity();

    }

}

从主要活动

调用任务
new UpdateDetailsAsyncTask(this, ArrayListOfObjects, this).exute();

更新2

...

更新3

执行某些工作的代码调用Util类中的一个方法,该方法在调用数据库类时。我有日志消息显示我保存到数据库的所有数据行。它正确启动并运行它,但onPostExecute()似乎在数据库方法完成之前被调用。

我的问题是我在活动中嵌套了类,当下面的类没有时,任务似乎已经完成了吗?

由于

2 个答案:

答案 0 :(得分:2)

您必须从Asynctask

更改为onPostExecute中的下一个活动

答案 1 :(得分:0)

是!

这是一个简单的AsuncTask代码

private class LoadImageAction extends AsyncTask<String, String, String>{

    private Course course;
    private ProgressBar pb;

    public LoadImageAction(Course course, ProgressBar pb){
        this.course = course;
        this.pb = pb;
    }

    @Override
    protected void onPreExecute(){

    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        return null;
    }

    @Override 
    protected void onProgressUpdate(String... string){


    }

    @Override
    protected void onPostExecute(String result){

    }
}

您可以按

运行操作
new LoadImageAction().execute();