1

したがって、このコードを使用して、データベースが関数「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);
    }
}
4

1 に答える 1

2

Asynctaskあなたのケースを処理するのに最も適切な方法だと思います。

于 2012-06-14T11:51:11.560 に答える