Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286

TextView тормозит копирование файла

12.09.2013, 01:08. Показов 1402. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Копирую файл при помощи буферных потоков ввода вывода, прогресс вывожу в диалоге.

Код
Java
1
2
fileProgress.setProgress((int) (publish / onePercent));
tvFileProgress.setText((int) (publish / onePercent)+" %");
первая строка прогресс бар, вторая прогресс в процентах. Если вторую строку закоментить то копирование завершается быстрее=)Это как так)?Расчет там вроде не самый ресурсоемкий. Как поправить?

З.Ы. Вообще с помощью потоков как то медленно копируется...подскажите другие решения.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2013, 01:08
Ответы с готовыми решениями:

Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную вещь - текст из TextView перенести в...

Вставка текста из файла в TextView
Доброй ночи. Вопрос возможно банален, но сейчас 2 ночи,а ответ так и не удалось найти. Собственно вопрос: Необходимо загрузить...

Отображение текста (из файла) в textView
В общем не могу разобраться как сделать так что бы при нажатии на кнопку (Button) в компоненте textView отображался текст, который будет...

10
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
12.09.2013, 07:25
к настоящей причине замедления наверное не относится, но ускорить отображение можно если обновлять элемент экрана только каждый целый процент
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 11:42  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
к настоящей причине замедления наверное не относится, но ускорить отображение можно если обновлять элемент экрана только каждый целый процент
Так он и так обновляется только тогда когда есть целое число
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
12.09.2013, 11:48
это все крутится в отдельном потоке, в doInBackground и onProgressUpdate ?
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 12:59  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
это все крутится в отдельном потоке, в doInBackground и onProgressUpdate ?
да

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Override
        protected Void doInBackground(Void... params) {
            switch (operationCode) {
            case FileManagerMain.COPY_FILE:
                byte data[] = new byte[1024];
                int step = 0;
                try {
                    FileInputStream fileInputStream = new FileInputStream(file);
                    BufferedInputStream bufferedInputStream = new BufferedInputStream(
                            fileInputStream);
                    FileOutputStream fileOutputStream = new FileOutputStream(
                            new File("/sdcard/test/1"));
                    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                            fileOutputStream);
                    while ((step = bufferedInputStream.read(data, 0, 1024)) != -1) {
                        bufferedOutputStream.write(data, 0, step);
                        publish += step;
                        publishProgress((int) publish);
                    }
                    Log.d(LOG_TAG, "" + publish + " params[0]" + file.length());
                    bufferedOutputStream.flush();
                    bufferedInputStream.close();
                    bufferedOutputStream.close();
                } catch (FileNotFoundException e) {
                    Log.d(LOG_TAG, "FileNotFoundException");
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.d(LOG_TAG, "IOException");
                    e.printStackTrace();
                }}
Java
1
2
3
4
protected void onProgressUpdate(Integer... progress) {
            if (copyDialog.fileIncrement(file, progress[0]))// в этом методе изменяется состояние view элементов диалогового окна
                publish = 0;
        }


copyDialog - класс для кастомного экрана загрузки (наследник Dialog)
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
12.09.2013, 14:05
интересно, только я тут не вижу обновление счетчика каждый ЦЕЛЫЙ процент?
Java
1
2
                       publish += step;
                       publishProgress((int) publish);
может как то так
Java
1
2
                       publish += step;
                       if (текущий полученный процент отличается от предыдущего выведенного на единицу) publishProgress((int) publish);
Добавлено через 1 минуту
...в противном случае мы будем задалбывать экран обновлениями каждый килобайт файла и если файл имеет размер мегабайт мы обновимся 1000 раз. а процентов всего 100)
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 14:57  [ТС]
Это делалось в классе диалогового окна

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private long getOnePercent(long fileSize) {
        return (long) fileSize / 100;
    }
 
    public boolean fileIncrement(File file, int publish) {
        long onePercent = getOnePercent(file.length());
        if (publish >= onePercent) {
            fileProgress.setProgress((int) (publish / onePercent));
            tvFileProgress.setText((int) (publish / onePercent) + " %");
return true;
            }
        return false;
 
    }
т.е. обновляется он как надо, только метод publishProgtrss() вызывается во время каждой итерации. Возможно из-за этого копируется так долго(хотя я склоняюсь к тому что буфер в 1024 маловат), но не отвечает на вопрос почему при комментировании строки в которой отображается прогресс в процентах все работает быстрее. Ведь publishProgtrss() вызывается столько же раз.
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
12.09.2013, 15:11
ваш код обновляет во время каждого вызова начиная с размера полученных данных больше чем 1 процент размера файла. то есть по-честному он работает только первый процент

Добавлено через 20 секунд
...а все остальное время молотит каждый вызов
1
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 15:23  [ТС]
Да, Вы правы.Не углядел... Благодарю!
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.09.2013, 23:08  [ТС]
Не хочется создавать новую тему, т.к. она косвенно касается этого обсуждения.

Гуру Java архитектуры подскажите немного по организации проекта. Есть нить которая загружает файл и есть класс который отображает прогресс копирования. Где лучше, даже не лучше а правильно разместить методы которые будут собирать информацию о процессе копирования(количество файлов для копирования, их размер и т.д.). Я сначала их разместил в классе диалога, но потом решил, что при определенных условия могут быть "долгоиграющими" и перенес их в нить копирования. Направьте на путь истинный)
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
17.09.2013, 09:38
я не гуру архитектуры, но читал вот это http://developer.android.com/t... f-anr.html
Potentially long running operations such as network or database operations, or computationally expensive calculations such as resizing bitmaps should be done in a worker thread (or in the case of databases operations, via an asynchronous request).

The most effecive way to create a worker thread for longer operations is with the AsyncTask class.
Операции над файлами, даже чтение содержимого каталога, однозначно лучше делать в отдельном потоке.
Я пытался делать в основном потоке, но были заметны тормоза UI даже на довольно прокачанном планшете. Да и удобнее так , имхо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2013, 09:38
Помогаю со студенческими работами здесь

Отображать в textView текст из файла txt
нужно отображать в textView текст из файла txt. может кто-то рассказать принцип или дать ссылку для ознакомления?

TextView txt = new TextView(this); - ошибка
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте создается таким же образом все нормально TextView txt =...

Тормозит запись и копирование дисков
Очень тормозит

Копирование определенного текста из файла, копирование и вставка в статичную переменную
Доброго вечера. Делаю программу которая бы выводила погоду на сегодня через данные сайта. Завис на передаче данных с сайта. Как можно...

Копирование одного текстового файла в другой, используя посимвольное, построчное и поблочное копирование
Здраствуйте, у меня такая проблемма мне надо обеспечить копирование одного текстового файла в другой, используя посимвольное, построчное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru