2017-01-25 1 views
2

Весь экран заполнен изображениями jst, такими как домашний экран facebook. Если изображений меньше, все работает хорошо. Но как только появляется больше изображений, например, 50 изображений. Приложение застряло в течение некоторого времени при прокрутке в устройствах Android. Кажется, что в изображениях есть вибрация. В samsung (j7 prime) эта проблема ниже, но заметна & кажется довольно неудобной в других устройствах samsung &, что создает для пользователя беспокойство. Однако в некоторых других устройствах, которые я тестировал, например, на мобильных телефонах Gionee (S6), приложение почти не воспроизводится. Прокрутка очень сложная, почти незаметная.Проблема с прокруткой, если на некоторых устройствах почти невозможно использовать некоторые изображения

Мой демо-код

mainContainer = new Container (new BoxLayout (BoxLayout.y())); 

    for (String imgUrl : allImages){ 
     Image singleImg = URLImage.createToStorage(placeholder, "small_" + imgObject + k, imgObject.toString(), URLImage.RESIZE_SCALE); 
     Button b = new Button (singleImg); 
     mainContainer.add (b); 
    } 

Update 1: Я изменил размер заполнителя на экран размер & добавил 2 кнопок BTN с теми же изображениями, так что есть довольно большой нет. изображений. Тогда та же проблема, что и выше, наблюдается, когда я снова создаю приложение для кухонной раковины.

if (placeholder == null) { 
    Image placeholderTmp = Image.createImage(Display.getInstance().getDisplayWidth(), Display.getInstance().getDisplayWidth(), 0); 
    if (Display.getInstance().isGaussianBlurSupported()) { 
     placeholderTmp = Display.getInstance().gaussianBlurImage(placeholderTmp, 10); 
    } else { 
     placeholderTmp = placeholderTmp.modifyAlpha((byte) 100); 
    } 
    placeholder = EncodedImage.createFromImage(placeholderTmp, true); 
} 
InfiniteContainer ic = new InfiniteContainer(10) { 
    List items; 
    List allItems = new ArrayList(); 
    String nextURL = WEBSERVICE_URL; 

    @Override 
    public Component[] fetchComponents(int index, int amount) { 
     if (index == 0) { 
      nextURL = WEBSERVICE_URL; 
     } 
     if (nextURL == null) { 
      return null; 
     } 

     ConnectionRequest req = new ConnectionRequest(nextURL) { 
      @Override 
      protected void readResponse(InputStream input) throws IOException { 
       items = null; 
       JSONParser parser = new JSONParser(); 
       Map response = parser.parseJSON(new InputStreamReader(input, "UTF-8")); 
       items = (List) response.get("items"); 
       nextURL = (String) response.get("nextPage"); 
      } 

      @Override 
      protected void handleException(Exception err) { 
       Log.e(err); 
       Display.getInstance().callSerially(() -> { 
        ToastBar.showErrorMessage("An error occured while connecting to the server: " + err); 
       }); 
      } 

      @Override 
      protected void handleErrorResponseCode(int code, String message) { 
       Display.getInstance().callSerially(() -> { 
        ToastBar.showErrorMessage("Error code from the server: " + code + "\n" + message); 
       }); 
      } 

     }; 
     req.setPost(false); 
     NetworkManager.getInstance().addToQueueAndWait(req); 

     if (items == null) { 
      return null; 
     } 

     allItems.addAll(items); 

     Component[] result = new Component[items.size()]; 
     for (int i = 0; i < 3; i++) { 

      for (int iter = 0; iter < result.length; iter++) { 
       Map<String, Object> m = (Map<String, Object>) items.get(iter); 
       String title = (String) m.get("title"); 
       String details = (String) m.get("details"); 
       String url = (String) m.get("url"); 
       String thumb = (String) m.get("thumb"); 
       URLImage thumbImage = URLImage.createToStorage(placeholder, url.substring(url.lastIndexOf("/") + 1), thumb, URLImage.RESIZE_SCALE_TO_FILL); 
       ScaleImageButton btn = new ScaleImageButton(thumbImage); 
       ScaleImageButton btn1 = new ScaleImageButton(thumbImage); 
       ScaleImageButton btn2 = new ScaleImageButton(thumbImage); 
       btn.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); 
       btn.getAllStyles().setMarginBottom(8); 
       btn1.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); 
       btn1.getAllStyles().setMarginBottom(8); 
       btn2.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); 
       btn2.getAllStyles().setMarginBottom(8); 
       result[iter] = BoxLayout.encloseY(btn,btn1,btn2); 
      } 
     } 
     Layout l = getLayout(); 
     if (l instanceof GridLayout) { 
      int cmps = getComponentCount() - 1 + result.length; 
      int extra = 0; 
      if (cmps % 3 != 0) { 
       extra = 1; 
      } 
      setLayout(new GridLayout(cmps/3 + extra, 3)); 
     } 
     return result; 
    } 
} 

Здесь я добавил кнопки в mainContainer и не видел ничего, чтобы улучшить решения, связанные с производительностью. Есть ли что-нибудь еще, что я должен искать? Thankyou

ответ

0

Я предлагаю проверить демонстрацию собак в кухонной раковине & раздел производительности в руководстве разработчика.

Также ознакомьтесь с демонстрацией контактов в кухонной раковине, где мы лениво загружаем информацию.

Каждый URLImage выполнит загрузку/lazyload, оба из которых будут заикаться от пользовательского интерфейса, и вам нужно поставить в очередь, что & справится с этим.

+0

Я видел кухонную раковину webService, она отлично работает в устройствах. Но я изменил размер заполнителя (высота и ширина), соответствующий размеру экрана, и увеличил число. изображений на странице кухонной раковины. И тогда та же проблема видна. Я обновил код, измененный в обновлении 1 выше. – beck

+0

Если у вас есть огромное количество полностраничных прокруток страниц, вы очень сильно обманываете GC. Вам необходимо оптимизировать использование изображений и выполнять много низкоуровневой работы для такого интерфейса, чтобы работать плавно. –

+0

Как я могу оптимизировать использование изображений? Я не понял. Смотрите видео с демонстрацией кухонной раковины, которую я настроил. (обновить 1 код выше) https://youtu.be/r0_NKdGlluo Слишком много прокрутки и происходит вибрация, как вещь ... downloadUrlToStorageInBackground решает проблему прокрутки, но недостаток - она ​​загружает и заменяет изображения каждый раз, когда экран открыт и не кэшируется 2. Что я не получил: после загрузки всех изображений можно сказать, что через 10 минут приложение открывается, почему у него возникли трудности с загрузкой изображений снова? (не jst, когда открывается экран на 1-м bt aftr длительный период времени 2) – beck

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