Size: a a a

Android Developers

2020 June 19

ℕo ℕame in Android Developers
slafe
Зачем добавлять в отдельном потоке?
источник

M

Maksym in Android Developers
Всем привет. Кто может подсказать в фрагменте сплеш экрана в onActivityCreated вызываю
       Handler().postDelayed({
           navigateToDestination(R.id.action_splashFragment_to_startFragment)
       }, 2000L)
 сам метод выглядит так
     fun navigateToDestination(@IdRes destination: Int, args: Bundle? = null, navOptions: NavOptions? = null) {
       (activity as NavigationActivity).navigateToDestination(destination, args, navOptions)
   }

Но на некоторых девайсах получаю ошибку fatal Exception: kotlin.TypeCastException null cannot be cast to non-null type в строке navigateToDestination
Что делаю не так?
источник

w

whoami in Android Developers
slafe
Привет
Такая проблема. Нужно добавлять элементы в RecyclerView по мере получения данных c WebSocket. Использую okhttp. Каждая операция добавления выполняется в отдельном потоке в функции output. Но почему-то не работает, хотя если добавлять элементы без нового потока(просто вызвать addLog() то все работает. В чем может быть причина?
так у вас websocket на UI потоке работает разве нет?
источник

s

slafe in Android Developers
ℕo ℕame
Зачем добавлять в отдельном потоке?
Добавление в лист сделано для каждого ответа сервера
Данные с сервера могут поступать настолько часто, что, например, после 1 действия для добавления данных в лист ещё не успеют выполниться, как поступят новые данные требующие 2-го действия
источник

s

slafe in Android Developers
whoami
так у вас websocket на UI потоке работает разве нет?
Да
источник

s

slafe in Android Developers
Насколько я понял, без потоков я рискую не обработать один из ответов сервера, если в это время обрабатывается другой
источник

s

slafe in Android Developers
Или exception какой выплюнет
источник

ℕo ℕame in Android Developers
slafe
Насколько я понял, без потоков я рискую не обработать один из ответов сервера, если в это время обрабатывается другой
Не, onmessage будет принимать все данные
источник

n

neikist in Android Developers
slafe
Насколько я понял, без потоков я рискую не обработать один из ответов сервера, если в это время обрабатывается другой
Да по идее просто в буффере копиться будет
источник

ℕo ℕame in Android Developers
neikist
Да по идее просто в буффере копиться будет
+
источник

w

whoami in Android Developers
slafe
Добавление в лист сделано для каждого ответа сервера
Данные с сервера могут поступать настолько часто, что, например, после 1 действия для добавления данных в лист ещё не успеют выполниться, как поступят новые данные требующие 2-го действия
через ListAdapter+DiffUtil я бы делал такое дело, там как раз обновление листа происходит в отдельном потоке

https://developer.android.com/reference/androidx/recyclerview/widget/ListAdapter
то есть вам надо DIFF_CALLBACK определить
источник

s

slafe in Android Developers
Т.е. потоки можно не использовать?
источник

ℕo ℕame in Android Developers
slafe
Т.е. потоки можно не использовать?
Да
источник

ℕo ℕame in Android Developers
Хотя, думаю, лучше сокет в отдельном потоке запустить
источник

w

whoami in Android Developers
ℕo ℕame
Хотя, думаю, лучше сокет в отдельном потоке запустить
+1
это же io по-любому блокироваться будет
источник

ℕo ℕame in Android Developers
ℕo ℕame
Хотя, думаю, лучше сокет в отдельном потоке запустить
И там же обрабатывать данные, и только потом в уи передавать
источник

ПБ

Просто Барин... in Android Developers
в чем ошибка, код ошибки мне ничего ничего внятного не дал
источник

ПБ

Просто Барин... in Android Developers
источник

n

neikist in Android Developers
Просто Барин
в чем ошибка, код ошибки мне ничего ничего внятного не дал
positionBar у тебя null. В тексте ошибки же прямо написано
источник

s

slafe in Android Developers
ℕo ℕame
Хотя, думаю, лучше сокет в отдельном потоке запустить
А в чем принципиальная разница ? Т.е. почему это решение лучше?
источник