Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
1

Остановить поток запущенный внутри onRefresh()

20.06.2016, 14:25. Показов 817. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть активити, которое реализует интерфейс SwipeRefreshLayout.OnRefreshListener. В его методе onRefresh() я запускаю поток Thread. Внутри метода run этого потока выполняю сетевой запрос получаю JSON и вызываю метод h.post(handleProcess); - метод соответственно Handlera, который в UI потоке запускает handleProcess - Runnable(этот кусок кода обновляет текст в TextView). Вопрос в том как мне теперь грамотно завершить поток который запускается внутри onRefresh? Тем более метод stop у Thread уже устарел? Какую конструкцию для завершения потока мне здесь нужно использовать?
Вот фрагмент кода с потоком
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
31
32
33
34
35
36
37
38
39
40
41
@Override
    public void onRefresh() {
 
        Log.d("Func", "Refresh" );
        Thread t = new Thread(new Runnable() {
            public void run() {
 
               getjson = req.cashingJSON();
 
 
                    //Log.d("Func", getjson );
                    h.post(handleProcess);
 
            }
 
            });
        t.start();
 
    }
 
    Runnable handleProcess = new Runnable() {
        public void run() {
 
            Log.d("Func","in handleProcess");
            //t.interrupt();
            if(getjson != null) {
                List<Object> data = req.parseResult(getjson);
                User user = (User) data.get(0);
 
                list1 = (ArrayList<_20140413>) data.get(1);
                list2 = (ArrayList<_20140414>) data.get(2);
                list3 = (ArrayList<_20140415>) data.get(3);
 
                Log.d("Func", "" + user.getBalance() + user.getMiles());
 
                mSwipeRefreshLayout.setRefreshing(false);
 
                textView.setText("USER" + '\n' + "balance" + "    " + user.getBalance() + '\n' + "miles" + "    " + user.getMiles());
            }
        }
    };
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2016, 14:25
Ответы с готовыми решениями:

Как остановить, а затем возобновить поток с циклом while внутри?
Помогите решить задачу! Есть поток Thread thread = new Thread(new...

Остановить цикл, запущенный в потоке
new Action(() =&gt;{ while (true){ }}); Запущен цикл в другом потоке, как его остановить из вне..??...

Остановить поиск, запущенный в отдельном потоке
Всем доброго дня. Imports System.Threading Public Class Form1 Public Class Param ...

Как остановить уже запущенный метод?
Вот к примеру я вызываю метод в Form_Load() SpisokBreakfast(); И он уже выполняет свою функцию,...

17
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 14:37 2
Цитата Сообщение от yura91 Посмотреть сообщение
как мне теперь грамотно завершить поток который запускается внутри onRefresh
там две строки и нет цикла, что ты собрался завершать?
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 14:44  [ТС] 3
там две строки и нет цикла
А какой должен быть цикл? Можете объяснить?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 14:45 4
А должен быть цикл? Можете объяснить?
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 14:45  [ТС] 5
Любой поток нужно завершать разве нет? Да там 2 функции ну и что из за этого нельзя никак завершить?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 14:46 6
Цитата Сообщение от yura91 Посмотреть сообщение
Любой поток нужно завершать разве нет?
разьве да?
Цитата Сообщение от yura91 Посмотреть сообщение
Да там 2 функции ну и что из за этого нельзя никак завершить?
а надо?
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 14:47  [ТС] 7
Нет все что есть это 2 функции они и должны быть
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
31
32
 public String cashingJSON() {
        final String[] json = {null};
        final String url = "http://mobile165.hr.phobos.work/list";
        mSettings = cxt.getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
        try {
            if (isOnline()) {
                Log.d("Func", " Here1");
                JSONParser req = new JSONParser(cxt);
                json[0] = req.getJSONObject(url);
                if (json[0] != null) {
                    Log.d("Func", " Here2");
                    SharedPreferences.Editor editor = mSettings.edit();
                    editor.putString(APP_PREFERENCES_NAME, json[0]);
                    editor.apply();
 
                }
 
            } else {
                String shjson = mSettings.getString(APP_PREFERENCES_NAME, "");
 
                if (shjson != "") {
                    json[0] = shjson;
 
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
      return json[0];
    }
Вот одна из них. json[0] = req.getJSONObject(url); - делает сетевой запрос
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 14:49 8
вопрос в чем?
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 14:51  [ТС] 9
Ну дело в том что поток может выполнятся бесконечно даже если приложение закрыть? Или поток выполняется только пока выполняется его метод run? А вы бесконечный цикл имеете ввиду(который не даст выйти из run)?

Добавлено через 1 минуту
Мой поток будет выполнятся когда приложение будет закрыто если его не остановить или 2 функции выполнятся и он остановится сам?

Добавлено через 20 секунд
Вот в этом вопрос
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 14:55 10
Цитата Сообщение от yura91 Посмотреть сообщение
Ну дело в том что поток может выполнятся бесконечно даже если приложение закрыть?
может бесконечно, а может и не бесконечно
Цитата Сообщение от yura91 Посмотреть сообщение
Или поток выполняется только пока выполняется его метод run?
логично,нет?
Цитата Сообщение от yura91 Посмотреть сообщение
А вы бесконечный цикл имеете ввиду(который не даст выйти из run)?
щито?
Цитата Сообщение от yura91 Посмотреть сообщение
Мой поток будет выполнятся когда приложение будет закрыто если его не остановить или 2 функции выполнятся и он остановится сам?
да
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 15:38  [ТС] 11
А в каком случае тогда нужно завершать поток и как лучше это делать? Просто stop устарел
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 15:44 12
Цитата Сообщение от yura91 Посмотреть сообщение
в каком случае
ни в этом случае
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 15:48  [ТС] 13
Кстати не подскажете как сделать чтобы элементы Ui и на малых и на больших экранах смотрелись нормально? Там есть папка dimens для размеров и как там надо делать, чтобы добиться что на разных разрешениях элементы Ui выглядят не слишком большими на малых и не слишком малыми при больших разрешениях??

Добавлено через 52 секунды
Ну подстроить под разрешение экрана
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.06.2016, 15:49 14
все, мы уже не обсуждаем эту тупую тему "как завершить поток состоящий из двух строчек кода"?
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
20.06.2016, 16:00  [ТС] 15
Не не обсуждаем. Спасибо за ответ, но мне бы еще хотелось, чтобы вы мне дали совет на счет вопроса выше - по поводу Ui компонентов и разных разрешений экранов как быть здесь? Как делать разную разметку для разных разрешений экранов? Можете объяснить
0
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
20.06.2016, 16:55 16
по поводу размера текста - пользователь сам может выбрать размер в настройках телефона, можно за него сильно не переживать
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
21.06.2016, 01:41  [ТС] 17
Речь идет не о размере самого текста, а о размере самого элемента TextView(который этот текст содержит). Несмотря на то что его ширину и высоту задаешь в dp на разных разрешениях экрана он выглядит по разному(при больших разрешениях TextView выглядит маленьким а на малых разрешениях экрана наоборот большим). Как учесть этот момент? Как сделать чтобы при разных разрешениях экрана TextView выглядел нормально? Как сделать разные разметки или задать параметры высоты и ширины UI элементов для разных размеров экрана?
0
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
21.06.2016, 08:36 18
Цитата Сообщение от yura91 Посмотреть сообщение
Несмотря на то что его ширину и высоту задаешь в dp
для этого придумали weight классика жанра
0
21.06.2016, 08:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2016, 08:36
Помогаю со студенческими работами здесь

Как остановить цикл, запущенный в потоке
Есть некий цикл Parallel.ForEach который запускается в отдельном потоке(что бы интерфейс не...

Остановить socket.Accept() внутри блока while который находится внутри потока
Сам код using System; using System.IO; using System.Collections.Generic; using...

Остановить поток
Всем привет. Допустим я создаю поток: void doge_start_thread() { ...

Остановить поток
Написал простенькую программку, которая выводит список одинаковых файлов: Основной код:...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru