Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 01:08     TextView тормозит копирование файла #1
Копирую файл при помощи буферных потоков ввода вывода, прогресс вывожу в диалоге.

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

З.Ы. Вообще с помощью потоков как то медленно копируется...подскажите другие решения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2725 / 1736 / 172
Регистрация: 13.01.2012
Сообщений: 6,501
12.09.2013, 07:25     TextView тормозит копирование файла #2
к настоящей причине замедления наверное не относится, но ускорить отображение можно если обновлять элемент экрана только каждый целый процент
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 11:42  [ТС]     TextView тормозит копирование файла #3
Цитата Сообщение от vxg Посмотреть сообщение
к настоящей причине замедления наверное не относится, но ускорить отображение можно если обновлять элемент экрана только каждый целый процент
Так он и так обновляется только тогда когда есть целое число
verylazy
Заблокирован
12.09.2013, 11:48     TextView тормозит копирование файла #4
это все крутится в отдельном потоке, в doInBackground и onProgressUpdate ?
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 12:59  [ТС]     TextView тормозит копирование файла #5
Цитата Сообщение от 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)
vxg
Модератор
 Аватар для vxg
2725 / 1736 / 172
Регистрация: 13.01.2012
Сообщений: 6,501
12.09.2013, 14:05     TextView тормозит копирование файла #6
интересно, только я тут не вижу обновление счетчика каждый ЦЕЛЫЙ процент?
Java
1
2
                       publish += step;
                       publishProgress((int) publish);
может как то так
Java
1
2
                       publish += step;
                       if (текущий полученный процент отличается от предыдущего выведенного на единицу) publishProgress((int) publish);
Добавлено через 1 минуту
...в противном случае мы будем задалбывать экран обновлениями каждый килобайт файла и если файл имеет размер мегабайт мы обновимся 1000 раз. а процентов всего 100)
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
12.09.2013, 14:57  [ТС]     TextView тормозит копирование файла #7
Это делалось в классе диалогового окна

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() вызывается столько же раз.
vxg
Модератор
 Аватар для vxg
2725 / 1736 / 172
Регистрация: 13.01.2012
Сообщений: 6,501
12.09.2013, 15:11     TextView тормозит копирование файла #8
ваш код обновляет во время каждого вызова начиная с размера полученных данных больше чем 1 процент размера файла. то есть по-честному он работает только первый процент

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

Гуру Java архитектуры подскажите немного по организации проекта. Есть нить которая загружает файл и есть класс который отображает прогресс копирования. Где лучше, даже не лучше а правильно разместить методы которые будут собирать информацию о процессе копирования(количество файлов для копирования, их размер и т.д.). Я сначала их разместил в классе диалога, но потом решил, что при определенных условия могут быть "долгоиграющими" и перенес их в нить копирования. Направьте на путь истинный)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 09:38     TextView тормозит копирование файла
Еще ссылки по теме:

Android TextView а AlertDialog
Android ViewPager и TextView
TextView бд Android
Отображение текста (из файла) в textView Android
Android AlarmManager и TextView

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

Или воспользуйтесь поиском по форуму:
verylazy
Заблокирован
17.09.2013, 09:38     TextView тормозит копирование файла #11
я не гуру архитектуры, но читал вот это http://developer.android.com/trainin.../perf-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 даже на довольно прокачанном планшете. Да и удобнее так , имхо.
Yandex
Объявления
17.09.2013, 09:38     TextView тормозит копирование файла
Ответ Создать тему
Опции темы

Текущее время: 00:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru