したがって、このコードを使用して、データベースが関数「setUpDB」でセットアップされている間に「インストール中...」というメッセージを表示し、データベース関数が完了すると削除されます。これはジンジャーブレッドとハニカムでは問題なく動作しますが、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);
}
}