MonthФевраль 2016

Laravel 5.1 и вебсокеты

Моя рабочая машина крутится на виртуалке Parallels, это ElementaryOS на основе Ubuntu, веб сервер Nginx. Описывать ниже установку Laravel, работу с виртуальными хостами ниже я не буду: пост посвящен только настройке и старту вебсокетов, точнее говоря — пример его использования. Мануал практически полностью передран отсюда, можете смело использовать его — там дается чуть более детальная информация по шагам. Правда, есть там и ошибки в описании: в test.blade.php используется ссылка на файл socket.io.js в папке assets, но как он туда попал — описания нет. В этом же файле я использовал ссылку https://cdn.socket.io/socket.io-1.4.5.js. В остальном мои шаги практически ноздря в ноздрю повторяют действия в туториале.

Continue reading

Websockets для Android

Изучая Fabric от Twitter, познакомился с отличным инструментом для создания REST запросов от клиента к серверу — Retrofit. Мало того, что само использование его удобно и, не побоюсь этого слова, элегантно, так еще оказалось, что в его разработке принимает участие Джейк Уортон, а кто не знает этого парня, верно :)? К сожалению, библиотеку пока еще не применял ни в одном из проектов (в последнем созданном использую Ion, например — тоже небольшая, но очень удобная), так что нюансы использования для меня еще скрыты. Все что есть — это первое знакомство.

Continue reading

MultiDex и java.lang.NoClassDefFoundError

Как правило, во время разработки я использую для тестирования приложений эмулятор Genymotion. Это удобный и быстрый инструмент, и он мне нравится куда больше того, что предлагает Google (хотя со времен незапускающихся эмуляторов на Eclipse многое изменилось, и я слышал, что дефолтные эмуляторы сейчас вполне ничего, но проверить не хватает времени), однако у него есть ряд ограничений. Так, для тестирования библиотек Google Cloud Messaging его нельзя использовать, потому что на нем отсутствуют библиотеки Google Play Services.

Другим моим постоянным тестовым устройством является Nexus 7 2013 — с ним все просто: это мой рабочий планшет, с кастомным ядром и рутованной прошивкой, но с ней все в порядке — это чистый Android Marshmallow (на текущий момент). На работе есть и другие устройства, и я сам ими довольно редко пользуюсь (Google Play Services не часто используется в рабочих проектах), но в этот раз мне пришлось изменить своим традициям.

При запуске рабочего приложения PlentyFi Social на Galaxy Nexus (Jelly Bean), я столкнулся с такой ошибкой

Немного покурив GitHub проекта, я выяснил, что эта проблема встречается довольно редко, официального решения по ней я не нашел, так что пришлось мне самому взяться за исследования.

Continue reading

Орешкин опыт

Опытным путем я выяснил, что когда горсть арахиса съедается быстрее, чем если ее съедать по одному зернышку, однако по вкусово-наполнительным-рот ощущениям это абсолютно одинаково.

То есть лучше клевать по штучке, чем закидывать в пасть лопатами.

Когда приложение работает в фоне?

Для перехвата события, когда приложение уходит в фон (при сворачивании, открытии рабочего стола или другого приложения), можно использовать метод Application.registerActivityLifecycleCallbacks, в качестве параметра которому передается объект ComponentCallbacks (набор коллбеков, которые являются стандартными для всех компонентов приложения — Activity, Service, ContentProvider и Application).  Сам же метод registerActivityLifecycleCallbacks вызывается каждый раз, когда выполняются соответствующие методы у Activiy или сервисов.

Continue reading

Lifecycle Activity: запуск приложения с выключенным экраном

В процессе написания GCM клиента, я столкнулся с одной непонятной, на первый взгляд, штукой: при выключенном экране IntentService успешно выполнял регистрацию токена и его сохранение на удаленном сервере, однако отправка сообщения о статусе операции через

не выполнялась в Activity.

In the reported issue, the screen if off. Hence activity window will not get focus, which results in activity’s onPause method getting called followed by onStop method, as the activity window is not visible.

http://stackoverflow.com/questions/25369909/onpause-and-onstop-called-immediately-after-starting-activity