因此,我使用此代码在数据库设置了函数“setUpDB”时显示消息“正在安装...”,然后在数据库函数完成时删除。这姜饼和蜂窝工作正常,但会导致应用程序在ICS预加载progressDialog使得我的应用程序仅在ICS中崩溃
final ProgressDialog pd=ProgressDialog.show(this,"","Installing...");
final Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
pd.dismiss();
}
}
};
//have subcategory heading???
Thread thread = new Thread()
{
@Override
public void run() {
setUpDB();
handler.sendEmptyMessage(0);
}
};
thread.start();
崩溃没有解雇的消息,应用程序将继续运行ICS(但你不能做任何事情),并且不显示消息,如果用户没有做任何事情它完成正在设置就会死机(因此为什么我需要安装消息)之前访问数据库..
好了,这是一个使用的AsyncTask
final ProgressDialog pd=ProgressDialog.show(this,"","Installing...");
final Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
pd.dismiss();
}
}
};
new databaseInstallTask().execute(handler);
代码,
private class databaseInstallTask extends AsyncTask<Handler, Void, Handler>
{
@Override
protected Handler doInBackground(Handler... params) {
setUpDB();
return params[0];
}
protected void onPostExecute(Handler handler) {
handler.sendEmptyMessage(0);
}
}
你的代码非常好!它应该工作!!告诉我们你的崩溃日志 –
它在ICS之前的任何工作都很好。也许Handler破坏了Android线程的第二条规则? 1)不要屏蔽UI线程 2)不要从UI线程之外访问Android UI工具包 – Chimeara