Загрузка растровых изображений в onCreate замедляет начало активности

1

Я новичок в программировании на Android и недавно участвовал в разработке некоторых приложений. Это не было проблемой, пока я не столкнулся с образами. Я пытаюсь разработать простое приложение, похожее на электронную книгу, в которой отображаются изображения (JPEG/PNG), хранящиеся в папке с возможностью переноса.

Мой первый подход состоял в том, чтобы использовать виджет "Галерея", но с этим я не смог реализовать правильный масштаб. Поэтому я теперь использую простой Imageview для одновременного отображения одного растрового изображения и изменения или масштабирования растрового изображения при событиях касания. Для этого мне пришлось декодировать все растровые изображения в битмап-массиве во время запуска активности, чтобы я мог использовать их в любое время.

Мое приложение начинается нормально на моей вкладке Galaxy, но каждый телефон, за исключением того, что занимает около 3-5 секунд, начинается. Я просто хотел узнать, есть ли простой способ загрузить растровые изображения во время запуска. Простите меня, если мой вопрос уже задан, но я много раз искал stackoverflow и не мог найти конкретного ответа на мой вопрос. Вот мой код. Надеюсь, кто-нибудь может помочь.

    package ....

    imports ....

    public class ImageViewFlipper extends Activity {

    private ViewFlipper viewFlipper;
    private Bitmap[] bMap= new Bitmap[15];
    private TextView currentpage;
    private ImageViewZoom iv;
    private imagenum=3;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    bMap[0] =BitmapFactory.decodeResource(getResources(), R.drawable.page);
    bMap[1] =BitmapFactory.decodeResource(getResources(), R.drawable.page1);
    bMap[2] =BitmapFactory.decodeResource(getResources(), R.drawable.page10);
    bMap[3] =BitmapFactory.decodeResource(getResources(), R.drawable.page11);
    bMap[4] =BitmapFactory.decodeResource(getResources(), R.drawable.page12);
    bMap[5] =BitmapFactory.decodeResource(getResources(), R.drawable.page13);
    bMap[6] =BitmapFactory.decodeResource(getResources(), R.drawable.page14);
    bMap[7] =BitmapFactory.decodeResource(getResources(), R.drawable.page2);
    bMap[8] =BitmapFactory.decodeResource(getResources(), R.drawable.page3);
    bMap[9] =BitmapFactory.decodeResource(getResources(), R.drawable.page4);
    bMap[10] =BitmapFactory.decodeResource(getResources(), R.drawable.page5);
    bMap[11] =BitmapFactory.decodeResource(getResources(), R.drawable.page6);
    bMap[12] =BitmapFactory.decodeResource(getResources(), R.drawable.page7);
    bMap[13] =BitmapFactory.decodeResource(getResources(), R.drawable.page8);
    bMap[14] =BitmapFactory.decodeResource(getResources(), R.drawable.page9);

    currentpage=(TextView)findViewById(R.id.textview);
    iv = (ImageViewZoom) findViewById(R.id.zero);
    iv.setImageBitmapReset( bMap[imagenum], 0, true );
    viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
    ......

значение imagenum изменяется в соответствии с методом onFling, ImageViewZoom является настраиваемым классом ImageView. Надеюсь, что этой информации достаточно.

Теги:
bitmap

3 ответа

2

Я бы предложил переместить всю загрузку битмапа в AsyncTask, который вы начинаете внутри onCreate. Создайте свою активность, чтобы отобразить что-то разумное, прежде чем загружать все изображения. AsyncTask может загружать все изображения и доставлять их в onPostExecute, а также может доставлять каждый из них, когда он загружается с использованием onProgressUpdate.

1

Почему бы не попробовать сначала загрузить 2 или 3 изображения, а затем загрузить другие изображения в фоновом режиме?

0

Вы также можете подумать о сервисе для загрузки изображения в фоновом режиме. http://developer.android.com/guide/topics/fundamentals/services.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню