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

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

Войти
Регистрация
Восстановить пароль
 
 
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
#1

Как забрать данные из отработавшего потока? - Программирование Android

16.10.2014, 14:41. Просмотров 1075. Ответов 22
Метки нет (Все метки)

Код в потоке сгенерил массив интов и завершился.Как забрать данные?
ЗЫ:в жабе есть какой то аналог WaitForSingleObject ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2014, 14:41     Как забрать данные из отработавшего потока?
Посмотрите здесь:
Android Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare()
Рэндомно забрать из cursor Android
Как извлечь данные из сервера Parse, чтобы эти данные были видны всем? Android
Android UiThread, как вынести процесс из главного потока?
Android Как не допустить создание потока еще раз?
Как можно в progressBar вернуть прогресс нужного потока? Android
Android Как получить значение String из UI потока в потоке AsyncTask?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
16.10.2014, 14:52     Как забрать данные из отработавшего потока? #2
yotsi, Handler/Async task.
Pablito
2414 / 1859 / 582
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
16.10.2014, 14:58     Как забрать данные из отработавшего потока? #3
или http://docs.oracle.com/javase/7/docs...utureTask.html
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
16.10.2014, 15:10  [ТС]     Как забрать данные из отработавшего потока? #4
А если Thread наследовать то ни как?
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 16:42     Как забрать данные из отработавшего потока? #5
yotsi, можете использовать интерфейс Callable он подразумевает возврат результата.
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
16.10.2014, 20:28  [ТС]     Как забрать данные из отработавшего потока? #6
Цитата Сообщение от KillAndEat Посмотреть сообщение
Callable
Костыль настолько зверский что нигде нету понятных примеров((((
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:00     Как забрать данные из отработавшего потока? #7
yotsi, почему костыль? Довольно удобный интерфейс.

Что там непонятного? Для начала нужно создать объект
Java
1
Future<возвращаемый тип данных> f
, далее создать экзекутор
Java
1
ExecutorService executorService  = Executors.newFixedThreadPool(5);//например
, потом все это дело нужно запустить
Java
1
2
3
4
f = executorService.submit(new Callable<возвращаемый тип данных>() {
            @Override
            public возвращаемый тип данных call(){}
});
ну и затем вытащить из Future результат путем вызова метода get();(этот метод лочит выполнение программы до отработки Callable), или подождать отработки вот таким способом
Java
1
2
3
while (!f.isDone()){
            //w8
        }
а затем при помощи того же get() вытащить результат
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
16.10.2014, 23:05  [ТС]     Как забрать данные из отработавшего потока? #8
Цитата Сообщение от KillAndEat Посмотреть сообщение
Довольно удобный интерфейс
Удобно это когда есть полноценный указатель на память,а не ООП изврат
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:41     Как забрать данные из отработавшего потока? #9
yotsi, в таком случае рекомендую Вам вернуться в С
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
17.10.2014, 15:46  [ТС]     Как забрать данные из отработавшего потока? #10
1.Что есть "экзекутор" ?
2.Что если потоков несколько?
3.Не вижу абсолютной никакой связи между данными в классе потока и этим "Future".
ЗЫ: вообще самый непонятный пример по "Callable" что я когда либо видел.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
17.10.2014, 15:48     Как забрать данные из отработавшего потока? #11
yotsi, загляните в соседнюю тему

Добавлено через 51 секунду
Цитата Сообщение от yotsi Посмотреть сообщение
1.Что есть "экзекутор" ?
механизм исполнения и контроля потоков

Цитата Сообщение от yotsi Посмотреть сообщение
2.Что если потоков несколько?
На здоровье
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 16:52     Как забрать данные из отработавшего потока? #12
yotsi, Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
17.10.2014, 17:40  [ТС]     Как забрать данные из отработавшего потока? #13
Цитата Сообщение от KillAndEat Посмотреть сообщение
Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
так а return в каком месте потока делать то?
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 18:56     Как забрать данные из отработавшего потока? #14
yotsi, в конце метода call()
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
18.10.2014, 18:07  [ТС]     Как забрать данные из отработавшего потока? #15
Цитата Сообщение от KillAndEat Посмотреть сообщение
в конце метода call()
Для какого случая?
Handlers,AsyncTask,Thread
???

Добавлено через 22 часа 27 минут
так как можно, например отсюдого:
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
class GenArr extends Thread
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
    }
}
Вывести результат работы потока?
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.10.2014, 18:30     Как забрать данные из отработавшего потока? #16
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
class GenArr extends Thread
{
    private android.os.Handler handler;
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(Handler handler, int arSz,int MIN,int MAX)
    {
        this.handler = handler;
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
        handler.post(new Runnable() { 
             @Override
             public void run() {
                  textView.setText("Done");
              }
    });
}
писал на коленке, проверьте.
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
18.10.2014, 21:10  [ТС]     Как забрать данные из отработавшего потока? #17
YuraAAA, Я вас не понимаю.При чем здесь это:
Java
1
textView.setText("Done");
???????????

Добавлено через 17 минут
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.10.2014, 11:40     Как забрать данные из отработавшего потока? #18
yotsi,
Цитата Сообщение от yotsi Посмотреть сообщение
Вывести результат работы потока?
Вот что это. А что Вам надо сделать с ним?

Цитата Сообщение от yotsi Посмотреть сообщение
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
Зачем Вам это?
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 78
19.10.2014, 21:32  [ТС]     Как забрать данные из отработавшего потока? #19
В общем все как всегда... После нескольких дней без результативных попыток найти что то в РУ, все решилось 20 минутами гугления на инглише.
Сделал через Runnable. Может кому из новичков будет полезно.Вот:
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
class GenArr implements Runnable
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX,Random R)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
        this.r=R;
    }
    @Override
    public void run()
    {
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=Color.argb(255,r.nextInt(max - min) + min, r.nextInt(max - min) + min, 
                    r.nextInt(max - min) + min);
        }
    }
    public int[] getThResult()
    {
        return this.aRR;
    }
}
/***********************************************/
        GenArr gar=new GenArr(this.widthScr*this.heighScr,0,255,this.R);
        Thread thr=new Thread(gar);
        thr.start();
        try {
            thr.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.colArr=gar.getThResult();
/***********************************************/
ЗЫ: учусь дальше параллелить задачи в потоки на жабе.

Добавлено через 4 часа 26 минут
Подскажите как в жабе называеться такая штука - в классе родительского потока объявляться метод, указатель на который передается в дочерний поток, из которого вызовом этого метода данные передаются назад в родительский поток?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2014, 15:55     Как забрать данные из отработавшего потока?
Еще ссылки по теме:
Как добавить в приложение просмотр потока с камеры видеонаблюдения? Android
Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке Android
Как зашифровать данные в БД? Android
Android Как подгрузить данные в AutoCompleteTextView?
Android Как передать данные в EditText

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

Или воспользуйтесь поиском по форуму:
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.10.2014, 15:55     Как забрать данные из отработавшего потока? #20
Цитата Сообщение от yotsi Посмотреть сообщение
thr.join();
что повесит вызывающий поток (скорее всего UI).
Yandex
Объявления
20.10.2014, 15:55     Как забрать данные из отработавшего потока?
Ответ Создать тему
Опции темы

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