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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
#1

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

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

У меня есть активити, которое реализует интерфейс 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2016, 14:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Остановить поток запущенный внутри onRefresh() (Программирование Android):

Запущенный service не работает, когда нет процесса - Программирование Android
Запускаю сервис в startForeground() он работает, в работающих приложениях у меня показано активны 1н процесс и 1н сервис (мой). Но когда...

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

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

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

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

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

17
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 14:37 #2
Цитата Сообщение от yura91 Посмотреть сообщение
как мне теперь грамотно завершить поток который запускается внутри onRefresh
там две строки и нет цикла, что ты собрался завершать?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 14:44  [ТС] #3
там две строки и нет цикла
А какой должен быть цикл? Можете объяснить?
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 14:45 #4
А должен быть цикл? Можете объяснить?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 14:45  [ТС] #5
Любой поток нужно завершать разве нет? Да там 2 функции ну и что из за этого нельзя никак завершить?
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 14:46 #6
Цитата Сообщение от yura91 Посмотреть сообщение
Любой поток нужно завершать разве нет?
разьве да?
Цитата Сообщение от yura91 Посмотреть сообщение
Да там 2 функции ну и что из за этого нельзя никак завершить?
а надо?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
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
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 14:49 #8
вопрос в чем?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 14:51  [ТС] #9
Ну дело в том что поток может выполнятся бесконечно даже если приложение закрыть? Или поток выполняется только пока выполняется его метод run? А вы бесконечный цикл имеете ввиду(который не даст выйти из run)?

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

Добавлено через 20 секунд
Вот в этом вопрос
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 14:55 #10
Цитата Сообщение от yura91 Посмотреть сообщение
Ну дело в том что поток может выполнятся бесконечно даже если приложение закрыть?
может бесконечно, а может и не бесконечно
Цитата Сообщение от yura91 Посмотреть сообщение
Или поток выполняется только пока выполняется его метод run?
логично,нет?
Цитата Сообщение от yura91 Посмотреть сообщение
А вы бесконечный цикл имеете ввиду(который не даст выйти из run)?
щито?
Цитата Сообщение от yura91 Посмотреть сообщение
Мой поток будет выполнятся когда приложение будет закрыто если его не остановить или 2 функции выполнятся и он остановится сам?
да
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 15:38  [ТС] #11
А в каком случае тогда нужно завершать поток и как лучше это делать? Просто stop устарел
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 15:44 #12
Цитата Сообщение от yura91 Посмотреть сообщение
в каком случае
ни в этом случае
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 15:48  [ТС] #13
Кстати не подскажете как сделать чтобы элементы Ui и на малых и на больших экранах смотрелись нормально? Там есть папка dimens для размеров и как там надо делать, чтобы добиться что на разных разрешениях элементы Ui выглядят не слишком большими на малых и не слишком малыми при больших разрешениях??

Добавлено через 52 секунды
Ну подстроить под разрешение экрана
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
20.06.2016, 15:49 #14
все, мы уже не обсуждаем эту тупую тему "как завершить поток состоящий из двух строчек кода"?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
20.06.2016, 16:00  [ТС] #15
Не не обсуждаем. Спасибо за ответ, но мне бы еще хотелось, чтобы вы мне дали совет на счет вопроса выше - по поводу Ui компонентов и разных разрешений экранов как быть здесь? Как делать разную разметку для разных разрешений экранов? Можете объяснить
0
20.06.2016, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2016, 16:00
Привет! Вот еще темы с ответами:

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

Остановить поток - Delphi
Помогите пожалуйста создать кнопку, нажав на которую можно было бы остановить поток.

Остановить поток - Delphi
Есть 3 потока 1-главный он отвечает за выполнение 2 и 3 потока нужно: 1 поток сотановился и запустил 2 поток, 2 поток выполнил свое...

Остановить поток - Java Сети
Есть такой потом: Runnable r = new Runnable() { public void run() { try { ServerSocket server = new...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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