在数据库正在复制时显示吐司

时间:2013-01-01 22:22:39

标签: android database multithreading sqlite

在我的应用程序的第一次运行中,我必须将数据库文件复制到数据文件夹。它需要大约10秒钟,在这段时间内用户看到黑屏。我想使用AsynTask技术向用户显示Toast。

使用此代码我调用复制数据库类,我也调用AsynTsk进程...

new asyn().execute();
    try {
        myDbHelper.createDataBase();
    }catch (IOException ioe){
        // throw new Error("Unable to create database");
    }

这是我的AsynTask代码:

    public class asyn extends AsyncTask<Void, Void, Void> {


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

     protected void onPreExecute(Void parmas2) {
         Context cntx = getApplicationContext();
         Toast toast = Toast.makeText(cntx, "aaaaaaaaaaa",Toast.LENGTH_SHORT);
         toast.show();
     }

     protected void onPostExecute(Void parmas3) {

     }

 }

我的错在哪里?我怎么能解决这个问题?我希望在数据库复制过程中展示吐司。

1 个答案:

答案 0 :(得分:3)

如果我理解createDataBase是需要10秒的部分,

你应该移动

try {
    myDbHelper.createDataBase();
} catch (IOException ioe) {
    // throw new Error("Unable to create database");
}

进入AsyncTask的doInBackground方法。

AsyncTask的工作方式是在一个单独的线程中调用doInBackground,但在Ui线程上调用其他方法(onPreExecute等)。如果您希望显示toast并且不在创建数据库时阻止Ui线程,则需要将繁重的工作放入doInBackground