-1

私のアプリケーションでは、モバイル データベースから画像をインポートし、これをアプリケーションの gridview に表示します。アクティビティの onCreate() に次のコードを同じように記述しました。

    String[] projection = { MediaStore.Images.Media._ID,};

    Cursor mImageCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null ); 

    if (mImageCursor != null)
    {

        mImageCursor.moveToFirst();

        for (int i = 0; i < mImageCursor.getCount(); i++)
        {
            Images im=new Images();
            eachImageView=new ImageView(this);
            int imageId = mImageCursor.getInt((mImageCursor.getColumnIndex( MediaStore.Images.Media._ID)));
            selectedImageUri = Uri.withAppendedPath(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId);

            ContentResolver cr = getContentResolver();

            Bitmap bm = getScaledImage(selectedImageUri, 2, cr);
            im.setBitmap(bm);
            eachImageView.setImageBitmap(bm);
            im.setImageView(eachImageView);

            arrayOfImages.add(im);

            mImageCursor.moveToNext();
        }
    }

しかし、問題は、画像の数が多いと時間がかかりすぎることです。この時間を短縮するために非同期タスクについて聞いたことがありますが、コードに実装する方法がわかりません。解決策を教えてください。前もって感謝します..

4

1 に答える 1

0

AsyncTaskは、UIスレッドをフリーズせずに操作を実行する場合に使用されます。あなたの場合、あなたはそれを使うことができます。ただし、アクティビティの開始時に画像を読み込んでいるようですので、ローダーを使用できます。

非常に優れた例は、ドキュメントとDemoApiで入手できます。

AsyncTaskローダー

于 2013-02-13T14:29:00.620 に答える