2013-11-18 6 views
1

Я создаю приложение, в котором пользователь может запустить слайд-шоу (авто-воспроизведение) изображений, нажав на определенную кнопку. Я начал поток, в котором новое изображение устанавливается в мое изображение через 1 секунду. Проблема в том, что мое приложение перестает отвечать на запросы и падает через несколько секунд.Создание slidshow в android

Пожалуйста, проверьте мой код и помогите мне решить эту проблему. (переменные корректно инициализированы)

playThread = new Runnable() { 

     @Override 
     public void run() { 
      synchronized (this) { 
      for (int i=pos;i<mImageIds.length;i++){ 
      //pos++; 

      selectedImage.setImageResource(mImageIds[i]); 

      try { 

       wait(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     }} 
     }}; 

    play.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      runOnUiThread(playThread); 



     } 
    }); 

} 

мой логарифм во время работы приложения замораживается!

enter image description here

+1

У вас есть * ошибки * в вашем LogCat ...? –

+0

нет .... такой же сообщение каждый раз (GC_ALLOC .... см. Логарифмическая привязка). – zaingz

+0

Вы можете отфильтровать уровень ошибок logcat в eclipse. @Embattled Swag ищет ошибки. Вы говорите, что у вас аварии, поэтому у вас журналы. Мы все нуждаемся в них, иначе мы слепы. Журналы сбора мусора не так важны во время разработки Android (в некоторых ситуациях гораздо более продвинутый, скажем так). – Snicolas

ответ

1

Метод runOnUiThread() предназначен для обновления пользовательского интерфейса. Никакой другой логики там не должно быть. Поэтому я бы предложил примерно следующее:

Thread t = new Thread() { 
    for (int i=pos;i<mImageIds.length;i++){ 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       selectedImage.setImageResource(mImageIds[i]); 
     }};); 
    try { 
     wait(1000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
}}; 

play.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     t.start(); 
    } 
}); 

Обратите внимание, что я не тестировал этот код.

+0

спасибо. это помогло мне с некоторой модификацией – zaingz

Смежные вопросы