0

Android は、以下のコードが Looper.prepare を呼び出す必要があると不平を言っています。Looper.prepare を追加しようとしましたが、6 回目の実行後にコードがクラッシュし、思ったほど単純ではないと思いました。任意の提案をいただければ幸いです。ちなみに、クエリの実行中に進行状況スピナーが必要だったため、このコードを AsyncTask でラップしました。もっと簡単なものがあれば教えてください。

private class doSearch extends AsyncTask<String, String, Cursor> {

    @Override
    protected Cursor doInBackground(String... searchstring) {

        [...]           
        CursorLoader loader = new CursorLoader(SearchActivity.this, codes, projection, mWhere, null, null);
        Cursor cursor = loader.loadInBackground();

        return cursor;
}
4

2 に答える 2

0

あなたはすでにAsyncTaskにいます。Async Task Loaderは、スレッドプール内にルート化された別のAsyncTaskを作成します。AsyncTasksはUIスレッドで構築する必要があります。彼らはこれを使って必要なルーパーをつかみます。非同期タスクを自分で作成し、このカーソルの負荷をシリアルで回避したい場合は、非同期カーソル取得方法を使用してください。または、AsyncTaskを削除してCursorLoaderを拡張し、deliverResult(Cursor)メソッドをオーバーライドしてコールバックとして機能させます。これは、AsyncTask内のonPostExecuteに似ています。

于 2011-07-21T16:13:44.223 に答える
0

これは通常、UI 関連の何かを行っているか、メイン スレッド以外の別の (バックグラウンド) スレッドからハンドラーの sendMessage 関数を呼び出していることを意味します。

于 2011-07-21T15:22:16.707 に答える