Весь экран заполнен изображениями 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
Я видел кухонную раковину webService, она отлично работает в устройствах. Но я изменил размер заполнителя (высота и ширина), соответствующий размеру экрана, и увеличил число. изображений на странице кухонной раковины. И тогда та же проблема видна. Я обновил код, измененный в обновлении 1 выше. – beck
Если у вас есть огромное количество полностраничных прокруток страниц, вы очень сильно обманываете GC. Вам необходимо оптимизировать использование изображений и выполнять много низкоуровневой работы для такого интерфейса, чтобы работать плавно. –
Как я могу оптимизировать использование изображений? Я не понял. Смотрите видео с демонстрацией кухонной раковины, которую я настроил. (обновить 1 код выше) https://youtu.be/r0_NKdGlluo Слишком много прокрутки и происходит вибрация, как вещь ... downloadUrlToStorageInBackground решает проблему прокрутки, но недостаток - она загружает и заменяет изображения каждый раз, когда экран открыт и не кэшируется 2. Что я не получил: после загрузки всех изображений можно сказать, что через 10 минут приложение открывается, почему у него возникли трудности с загрузкой изображений снова? (не jst, когда открывается экран на 1-м bt aftr длительный период времени 2) – beck