Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 19 фев 2019, 16:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 20 май 2012, 23:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.

В этом уроке:


- разбираемся, что такое Handler и зачем он нужен




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 19 май 2017, 10:21, всего редактировалось 7 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 май 2012, 09:45 

Зарегистрирован: 21 май 2012, 09:42
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо за урок. Я читаю уроки с конца. Не особо вчитываясь в код, но внимательно читая сам текст, что бы понимать. В данном примере для меня все ясно, это мне пригодится.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 май 2012, 16:50 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 17:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
Немного не по теме урока (Handler), но т.к. добрая половина была посвящена "проталкиванию" сообщения к UI из второстепенного потока в основной, вот еще 3 способа это сделать
http://developer.android.com/resources/ ... ading.html


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 май 2012, 09:40 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
andev писал(а):
Немного не по теме урока (Handler), но т.к. добрая половина была посвящена "проталкиванию" сообщения к UI из второстепенного потока в основной, вот еще 3 способа это сделать
http://developer.android.com/resources/ ... ading.html


Есть такое дело, об этом тоже будет урок.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 01 июн 2012, 14:19 
Аватар пользователя

Зарегистрирован: 05 май 2012, 10:42
Сообщений: 13
Откуда: Бобруйск
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Не пойму, чем работа через Handler отличается от AsyncTask и что лучше использовать? Насколько я понял AsyncTask использует методы Hendler, т.е. это как бы обвёртка для handler-a и видимо предпочтительнее использовать её, или я ошибаюсь?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 04 июн 2012, 10:38 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
goodroot писал(а):
Не пойму, чем работа через Handler отличается от AsyncTask и что лучше использовать? Насколько я понял AsyncTask использует методы Hendler, т.е. это как бы обвёртка для handler-a и видимо предпочтительнее использовать её, или я ошибаюсь?

Все так. Используем то, что больше подходит для ситуации или, что больше нравится.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 июн 2012, 13:35 

Зарегистрирован: 17 апр 2012, 11:04
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
а возможен такой код который будет запрещать отправку смс на короткие номера, или будет требовать разрешение через дополнительное диалоговое окошко перед каждой отправкой смс, в том числе и несанкционированную абонентом?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 июн 2012, 22:52 
Аватар пользователя

Зарегистрирован: 07 мар 2012, 12:50
Сообщений: 85
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Хотелось бы уточнить. С потоками в Java я знаком и применял их даже в Андроид, ошибки вроде не вылетало... Но вопрос у меня вот по какому поводу. В Java насколько я знаю поток можно создать 2мя способами : через класс наследник или путем имплементации Runnable... В метод run ложится тело "то что будет делать поток". То тут мне не совсем понятно. Метод handleMessage является аналогом run или же выполняет другую роль?

Вопрос номер два :
Строка if (msg.what == 10) btnStart.setEnabled(true); В эту строку мы кладем int. Метод what возвращает текущее значение переданного параметра?

И третий вопрос, точкой входа в handleMessage является Handler.sendEmptyMessage(msg); ?

Спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 июн 2012, 15:06 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
MeTeOpA писал(а):
Хотелось бы уточнить. С потоками в Java я знаком и применял их даже в Андроид, ошибки вроде не вылетало... Но вопрос у меня вот по какому поводу. В Java насколько я знаю поток можно создать 2мя способами : через класс наследник или путем имплементации Runnable... В метод run ложится тело "то что будет делать поток". То тут мне не совсем понятно. Метод handleMessage является аналогом run или же выполняет другую роль?

Вопрос номер два :
Строка if (msg.what == 10) btnStart.setEnabled(true); В эту строку мы кладем int. Метод what возвращает текущее значение переданного параметра?

И третий вопрос, точкой входа в handleMessage является Handler.sendEmptyMessage(msg); ?

Спасибо.


1) Handler - это обработчик. Обычно он принадлежит какому-либо потоку и работает с его очередью сообщений.

Можно провести аналогию со станком (поток) и работником (handler). Работник обычно прикреплен к станку и работает только на нем.
Ну и, допустим, у станка сбоку есть некий ящик (очередь сообщений).

Работнику принесли несколько заготовок из которых надо сделать детали (Мы передали в handler несколько сообщений).
Работник складывает полученные заготовки в ящик (Handler помещает все полученные сообщения в очередь процесса).
Работник по очереди достает заготовки из ящика и обрабатывает с помощью своих рук и мастерства, используя ресурс станка (Handler получает из очереди сообщения и обрабатывает их в своем методе handleMessage, используя ресурс процесса).


2) То, что кладем в sendEmptyMessage, читаем потом в what.

3) Точкой входа в handleMessage является механизм в процессе, который мониторит очередь сообщений и отправляет их в handler на обработку. Он будет отправлять их по очереди, пока не закончатся. Либо можно указать ему время, через которое он должен их отправить.

В следующих уроках идет более подробный обзор handler-а.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 авг 2012, 13:14 

Зарегистрирован: 30 авг 2012, 13:00
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
damager82 писал(а):
В этом уроке:

- разбираемся, что такое Handler и зачем он нужен

Click here to read this article!



спасибо
в кои веки пример из инета заработал без длительного поиска ошибок в коде)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 окт 2012, 20:49 
Аватар пользователя

Зарегистрирован: 01 апр 2012, 16:09
Сообщений: 117
Откуда: Минск
Благодарил (а): 11 раз.
Поблагодарили: 5 раз.
Эклипс намекнул на то, что Handler должен быть статическим, иначе возможны утечки памяти.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 ноя 2012, 22:25 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
brucemax писал(а):
Эклипс намекнул на то, что Handler должен быть статическим, иначе возможны утечки памяти.

Я Handlerы так и реализовал, благо в Инете нашлись паттерны на эту тему. Для новичков это сильно усложнит и без того непростую тему связанную с потоками, а тут еще утечки памяти и слабые ссылки :) Но для тех, кто реально пишет приложения для Андроид и JAVA нужно иметь это ввиду.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 ноя 2012, 15:27 
Аватар пользователя

Зарегистрирован: 01 апр 2012, 16:09
Сообщений: 117
Откуда: Минск
Благодарил (а): 11 раз.
Поблагодарили: 5 раз.
AndreyI писал(а):
благо в Инете нашлись паттерны на эту тему

А ссылочки не осталось?)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 ноя 2012, 15:57 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
http://stackoverflow.com/questions/1140 ... inghandler
http://stackoverflow.com/questions/1127 ... in-android
См. первые ответы.
Ну и конечно паттерн от Romain Guy на основе которого, собственно, и были составлены вышеприведенные.

Если я правильно понял, это связано с особенностью работы сборщика мусора, он не уничтожает объекты в памяти пока на них ссылается хотя бы один другой не уничтоженный объект. А handler-ы не уничтожаются пока у них в очереди есть необработанные сообщения, это может случиться, к примеру, если получать сообщение уже не кому, т.е. объект к которому он привязан хотя еще и существует в памяти, но его поток уже отработал, в особенности это актуально для сообщений с задержкой по времени, т.е. пока сообщение ждет отправки получателю, пользователь может попросту закрыть приложение и получать сообщение будет некому. Т.к. при обычной (нестатической) реализации класса объект handler имеет внутреннюю ссылку на объект внешнего класса, то он удерживает от уничтожения весь объект этого класса, т.е. получается они как бы друг друга оберегают от сборщика мусора перекрестными ссылками друг на друга (этакий deadLock от смерти :)). А если учесть, что handler создавался в классе Activity к которому привязано еще куча объектов (это фактически весь GUI этого Activity со всей иерархией View) и все это остается висеть мертвым грузом в памяти.
Как-то так, если не прав, поправьте.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 ноя 2012, 10:28 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
AndreyI писал(а):
http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler
http://stackoverflow.com/questions/1127 ... in-android
См. первые ответы.
Ну и конечно паттерн от Romain Guy на основе которого, собственно, и были составлены вышеприведенные.

Если я правильно понял, это связано с особенностью работы сборщика мусора, он не уничтожает объекты в памяти пока на них ссылается хотя бы один другой не уничтоженный объект. А handler-ы не уничтожаются пока у них в очереди есть необработанные сообщения, это может случиться, к примеру, если получать сообщение уже не кому, т.е. объект к которому он привязан хотя еще и существует в памяти, но его поток уже отработал, в особенности это актуально для сообщений с задержкой по времени, т.е. пока сообщение ждет отправки получателю, пользователь может попросту закрыть приложение и получать сообщение будет некому. Т.к. при обычной (нестатической) реализации класса объект handler имеет внутреннюю ссылку на объект внешнего класса, то он удерживает от уничтожения весь объект этого класса, т.е. получается они как бы друг друга оберегают от сборщика мусора перекрестными ссылками друг на друга (этакий deadLock от смерти :)). А если учесть, что handler создавался в классе Activity к которому привязано еще куча объектов (это фактически весь GUI этого Activity со всей иерархией View) и все это остается висеть мертвым грузом в памяти.
Как-то так, если не прав, поправьте.

Полезно, спасибо!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 фев 2013, 22:42 

Зарегистрирован: 03 фев 2013, 22:59
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Написано на этом уроке:

Получить доступ к Handler из какого-либо другого потока мы сможем без проблем, т.к. основной поток монополизирует только доступ к UI. А элементы классов (в нашем случае это Handler в MainActivity.java) доступны в любых потоках. Таким образом Handler выступит в качестве «моста» между потоками.


Подскажите, если объявление другого потока вынесено в отдельный файл. Как тогда получать доступ к Handler, который описан в файле с MainActivity?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 июн 2013, 16:41 

Зарегистрирован: 21 май 2013, 00:41
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
здесь нормально выводится в TextView из другого потока

Код: [ Загрузить ] [ Скрыть ]
  1.     public void onCreate(Bundle savedInstanceState) { 
  2.         super.onCreate(savedInstanceState); 
  3.         setContentView(R.layout.main); 
  4.         tvInfo = (TextView) findViewById(R.id.tvInfo); 
  5.         Thread t = new Thread(new Runnable() { 
  6.             public void run() { 
  7.                  
  8.                     tvInfo.setText("Закачано файлов: " + 11111); 
  9.                  
  10.             } 
  11.         }); 
  12.         t.start(); 
  13.     } 

проблемы появляются при добавлении downloadFile(). В документации андроид по этому поводу пишут, что можно получать доступ к UI элементам из другого потока, но делать это нежелательно. Т.е. доступ все-таки имеется


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 авг 2013, 18:29 

Зарегистрирован: 10 авг 2013, 03:52
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здратсвуйте. Как сделать чтобы когда все (10) файлы загрузились чтобы processbar тоже остановился крутить? и опять когда нажимаем start process bar опять крутился.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 авг 2013, 20:34 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Ну делай в хэндлере спиннеру dismiss() когда не нужен и show() когда нужен.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 авг 2013, 02:34 

Зарегистрирован: 10 авг 2013, 03:52
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Все сделал. на 81 уроке есть пример как скрыть ProgressBar. pbar.setVisibility(View.INVISIBLE); .
я не понял зачем нам нужен spinner?
через dismiss() не получилось,то есть я не знал как и куда писать этот dismiss().


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB