因此,我使用此代碼在數據庫設置了函數「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