![]() |
|
Модераторы: javastic |
![]()
|
|
| tyshkan007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.1.2014 Репутация: нет Всего: нет |
в андройде есть главный поток , создаем второй поток, к примеру он отработал(или во время своей работы) в качестве колбека можно заюзать Handler и получить от второго потока данные, и продолжить работу в главном потоке.
как это провернуть без Handler средствами чисто java? как из потока 2 начать делать что либо первым потоком? Это сообщение отредактировал(а) tyshkan007 - 15.1.2014, 15:35 |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Чисто джава ничего не знает о главенстве потоков. Они для нее все одинаковые. В этом смысле там это все можно напрямую вызвать, главное синхронизацию не забыть. Несколько странная формулировка. Если все-таки речь идет о работе с UI из вторичного потока, то так делать ельзя никак. Надо передавать данные в основной поток. Основной интсрумент это хэндлер. В взависимости от того, где находится кэллбэк, можно использовать методы активити. Для чего это надо? Главный поток в идеале вообще ничего делать не дложен кроме обработка UI. Какая именно стоит задача? Может есть лучше варианты -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| tyshkan007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.1.2014 Репутация: нет Всего: нет |
для саморазвития, у меня нету задачи. Просто не понимаю как работать с java потоками без android sdk.
правильно ли я представляю что такое синхронизация? это примерно как в mysql транзакции, грубо говоря временная блокировка доступа, и тут мой мозг начинает закипать. Если ставить синхронизацию то по идеи, если будут совершаться операции с синхронизированным объектом, сначала с 2 потока, потом с UI, то UI будет жать доступа к монитору объекта, то есть UI застопориться, какой смысл тогда вообще от второго потока, если он будет препятствовать первому? И как сказать первому(UI) потоку, эй я тут узнал новую инфу, отобрази ее? или как вы сказали: как это сделать средствами java?(без android sdk) я чувствую что я что-то упускаю и путаю... |
|||
|
||||
| Felan |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Вот тут все написано. Ну вобщих чертах похоже, что правильно. Смысл в том, что бы выносить во вторичные потоки, то, что может выполняться параллельно. И не выносить то, что не может выполняться праллельно.
Через синхронизированные свойства какого-либо объекта. Через посылку сообщений... Как слать сообщения?.. Ну хэндлер - один из способов. В остальном почитай документацию на андроид. Я их не помню... Без Android SDK нет никакого "Основного потока". Я еще раз повторяю. UI поток андроида свляется особенным только с т.з. андроида. Java ничего про эти особенности не знает. А особенность заключатеся в том, что в нем постоянно крутиться цикл "выборки сообщений", который обрабатывает ввод пользователя и взаимодействует с контролами (View). Библиотека контролов не потокобезопастна, поэтому и нельзя смешивать дотуп к UI. К чистой Java это не имеет отношения. Это особенность фреймворка контролов. Это сообщение отредактировал(а) Felan - 16.1.2014, 12:45 -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||
|
|||||
| ShellRaiser |
|
|||
![]() еще чуть и закоммичу ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 20.7.2007 Где: Белaрусь, Гродно Репутация: нет Всего: 1 |
Если вы хотите использовать хэндлер для UI потока, то лучше инициализировать через:
Тогда ваш код гарантировано вызовется на UI треде. + если уж на то пошло, есть AsyncTask у которого pre и post execute вызываются на том же потоке, где вы вызвали execute, но doInBackground в другом потоке Это сообщение отредактировал(а) ShellRaiser - 19.1.2014, 22:15 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Android | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |