在我的应用程序的第一次运行中,我必须将数据库文件复制到数据文件夹。它需要大约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) {
}
}
我的错在哪里?我怎么能解决这个问题?我希望在数据库复制过程中展示吐司。
答案 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
。