首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换到另一个活动时进度对话框冻结

切换到另一个活动时进度对话框冻结
EN

Stack Overflow用户
提问于 2012-11-16 15:54:52
回答 2查看 1.5K关注 0票数 3

我有两个活动。当按意图切换到第二个活动时,它需要3-4秒,因为它有很多带有从SQLite等获取数据的适配器的组件。因此,我想在切换时显示一个进度对话框。

为此,我一直在挖掘主题,并尝试了其中的许多:

1-)在第二个活动中使用AsyncTask。当我单击一个组件切换到第二个活动时,它不会立即显示进度对话框。它等待3-4秒,然后进度对话框显示不到一秒,这不是用户友好的方式。

2)在第一个活动中使用AsyncTask。只要我点击该组件,它就会显示出来,但是进度轮没有旋转。进度对话框会冻结。

3-)对第二个活动使用AsyncTask onStart()方法。这就是第一种方法的结果。

下面的代码实现了上面的第二种方法,在第一个活动上使用AsyncTask。

代码语言:javascript
复制
public void toVisitRegister(Event event) { //Switching to the second activity
    new startingThread().execute();
    Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
    startActivity(toVisitRegister);
    finish();
}

这是AsyncTask

代码语言:javascript
复制
public class startingThread extends AsyncTask<String, String, String> { 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        startingProgress = new ProgressDialog(MainCalendar.this);
        startingProgress.setTitle("Visit Register");
        startingProgress.setMessage("Initializing...");
        startingProgress.show();
        }

    @Override
    protected String doInBackground(String... params) {
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if(MainCalendar.this.startingProgress != null) {
            MainCalendar.this.startingProgress.dismiss();
        }
    }
}

我还尝试在onPostExecute中调用startActivity,但没有成功。因此,我期待着您对这个问题的意见和建议。任何帮助都将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 15:59:38

代码语言:javascript
复制
I also tried to call startActivity in onPostExecute,

将活动上下文传递给startingThread AsyncTask,并将启动活动代码放入AsyncTask的onPostExecute()中。

代码语言:javascript
复制
@Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if(MainCalendar.this.startingProgress != null) {
            MainCalendar.this.startingProgress.dismiss();
            Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
            mContext.startActivity(toVisitRegister);
            mContext.finish();
        }
    }

这里的mContext是您当前MainCalendar活动的上下文。

票数 2
EN

Stack Overflow用户

发布于 2012-11-16 15:59:21

查看您的实现,AsyncTask将没有时间工作,因为您将立即跳到下一个活动。尝试调用PostExecute()中的下一个活动。

代码语言:javascript
复制
I also tried to call startActivity in onPostExecute, but it didn't work. 

你是这样做的吗:

代码语言:javascript
复制
public void toVisitRegister(Event event) { //Switching to the second activity
    new startingThread().execute();
}

public class startingThread extends AsyncTask<String, String, String> { 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        startingProgress = new ProgressDialog(MainCalendar.this);
        startingProgress.setTitle("Visit Register");
        startingProgress.setMessage("Initializing...");
        startingProgress.show();
        }

    @Override
    protected String doInBackground(String... params) {
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
         if(MainCalendar.this.startingProgress != null) {
            MainCalendar.this.startingProgress.dismiss();
        }
    Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
    startActivity(toVisitRegister);
    finish();

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13412515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档