Search
Write a publication
Pull to refresh
10
0
Илья @jvIlya

User

Send message

ListView в Android: Кастомизация списков

Reading time15 min
Views219K
Продолжение статьи о ListView в Android, в котором мы рассмотрим более сложные примеры его использования, такие, как иконки на элементах списка и добавление чекбоксов к этим элементам. Так же мы рассмотрим возможности по оптимизации кода.
Читать дальше →

Работающий Pull to refresh

Reading time3 min
Views13K
Это рассказ о том, как получилась работающая реализация Pull to refresh под Android. Совсем не будет примеров кода. Немного картинок и в конце статьи ссылка на архив проекта.

Недавно встала необходимость встроить в текущее приложение Pull to refresh. Это сейчас модно, пользователи привыкли, и для твиттер-клиентов уже стало стандартом. Поиск готовых решений в сети вывел на единственный вариант — open-source проект Johan Nilsson android-pulltorefresh на Github.



Читать дальше →

OpenGL iBooks-like анимация перелистывания

Reading time6 min
Views9.6K
Помню, когда я в первый раз взял в руки iPad, более всего меня поразило приложение iBooks c его натуралистичным перелистыванием страниц. Все остальные «фишки» как-то не особо впечатляли, но это… это показалось воплощением полной интерактивности. По сравнению с обычными графическими интерфейсами, использующими стандартные элементы GUI, интерфейсы с использованием анимации OpenGL это новый шаг в развитии пользовательских интерфейсов.
Читать дальше →

Генерация версии android приложения из ревизии subversion и git

Reading time6 min
Views3.9K
Когда пользователи сталкиваются с проблемами — всегда хочется точно знать какой именно версией ПО они пользуются. При использовании системы контроля версий и автоматической нумерации версий ПО, такую информацию можно предоставить пользователям, а в случае необходимости просто попросить продиктовать строку.

О том, как можно пронумеровать свой android проект написано здесь и здесь. В обоих статьях рассмотрен пример получения версии проекта с помощью 'svn info', причём в первой статье автор жалуется на отсутствие SvnAnt, а во второй статье автор замечает проблему, связанную с использованием 'svn info'. Проблема связана с тем, что 'svn info' выдаёт неточные сведения о ревизии рабочей копии.

Далее рассмотрен пример решения этой проблемы достаточно простым способом.
UPD: добавлен скрипт для git.
Читать дальше →

Некоторые возможности использования Intent'ов

Reading time6 min
Views68K

Введение


Объекты типа Intent могут быть использованы для общения между отдельными частями Android приложения, либо между различными приложениями системы. Мощь механизма интентов заключается в том, что с его помощью можно обращаться к любому установленному в системе приложению. Это позволяет повторно использовать некоторые компоненты и значительно сократить время на разработку.

В этой статье я покажу некоторые возможности использования класса Intent для обращения к системным приложениям.
Читать дальше →

JPA: Хранение перечислений в базе данных

Reading time6 min
Views48K
Наверняка многие из вас сталкивались с проблемой хранения перечислений в базе данных, возникающей при попытке реализации удобного способа работы с разного рода служебными справочниками — статусами, типами объектов и так далее.

Суть её очень проста: если хранить перечисления как сущности (@Entity), то с ними получается крайне неудобно работать, база данных нагружается лишними запросами даже несмотря на кэширование, а сами запросы к БД усложняются лишними JOIN'ами. Если же перечисление определять как enum, то с ними становится удобно работать, но возникает проблема синхронизации с базой данных и отслеживания ошибок таковой синхронизации.

Особенно актуально это в том случае, когда поле, содержащее перечисление, аннотировано как @Enumerated(EnumType.ORDINAL) — всё мгновенно ломается при смене порядка объявления значений. Если же мы храним значения в строковом виде — как @Enumerated(EnumType.STRING) — возникает проблема скорости доступа, так как индексы по строковым полям менее эффективны и занимают больше места. Более того, вне зависимости от способа хранения значения поля при отсутствии в базе данных таблицы со списком допустимых значений мы никак не защищены от некорректных или устаревших данных и, как следствие, проблем.

Однако сама идея хранения в базе данных заманчива простотой построения запросов вручную, очень ценной при отладке ПО или решении сложных ситуаций. Когда можно написать не просто SELECT id, title FROM product WHERE status = 5, а, скажем, SELECT id, title FROM product JOIN status ON status.id = product.status_id WHERE status.code = 'NEW' — это очень ценно. В том числе и тем, что мы всегда можем быть уверены в том, что status_id содержит корректное значение, если поставим FOREIGN KEY.

На самом деле, существует очень простое и изящное решение этой проблемы, убивающее сразу всех зайцев.
Читать дальше →

American vs. British

Reading time2 min
Views34K
Сегодня деление на американский и британский варианты английского языка во многом можно считать условным. Американизмы могут активно использоваться в речи британцев и впоследствии укорениться в британской речи, так что иногда при редактировании очередной статьи в словаре ABBYY Lingvo приходится отказываться от пометы «амер.» (американский вариант английского языка) или ограничиваться компромиссным «преим. амер.» (используется преимущественно в американском варианте английского языка). Например, не так давно пользователь на форуме Lingvo упрекнул нас в том, что мы до сих пор считаем слово awesome (в его известном значении) американизмом, хотя это давно не так. Возразить нечего, пользователь прав. Региональные границы стираются, модные американские словечки становятся атрибутом речи британской молодежи и т.д.

Но есть неизменные различия американского и британского английского языка в наименовании тех или иных предметов и явлений. Вот лишь некоторые из них.

То, что британцы именуют reception, американцы назовут front desk (стойка администрации — в гостинице, например).
Читать дальше →

Шаблоны проектирования при разработке под Android. Часть 2 — MVP и Unit tests. Путь Джедая

Reading time9 min
Views41K
По началу я хотел только кратко рассказать что такое MVP, но кратко не получилось. Поэтому я выделил этот кусок в отдельную статью, которая мало относится к Android, но очень важна для понимания MVP и модульных тестов. Обещанные же статьи никуда не денутся.

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

Я попробую поставить вас на путь джедая и научить вас с закрытыми глазами крошить в капусту кучи багов с помощью модульных тестов и других технологий.

Читать дальше →

Фоновая подгрузка списков

Reading time2 min
Views11K
При загрузке больших списков из медленного источника (например HTTP запрос) нет смысла загружать весь список сразу, особенно если пользователю потребуется лишь небольшое количество данных (результаты поиска, новостные статьи). В этом случае целесообразно реализовать постраничную подгрузку списка. В этой статье показан простой способ с использованием footer view контрола ListView. Подразумевается, что у нас уже есть список и его адаптер, который загружает элементы (пусть несколько первых, или весь) используя например ассинхронный HTTP запрос. Удобнее вынести запрос данных в отдельный класс, в котором добавить возможность подгрузки очередной страницы.

План действий


  1. Подготавливаем layout для элемента сообщения о процессе загрузки
  2. Подготавливаем контрол ListView
  3. Добавляем в адаптер списка код запуска загрузки следующей страницы
  4. Обрабатываем результат загрузки очередной страницы

Читать дальше →

Как ускорить эмулятор Android на 400%

Reading time5 min
Views143K
Последние несколько месяцев я работал над SDK для Android, входящим в платформу управления контентом Nuxeo. Особенно много работы было в последнее время, с приближением официального релиза SDK. Я хочу поделиться несколькими практическими советами по поводу разработки под Android, в частности тестирования и эмуляции. Уже после нескольких дней разработки я понял, что работа с эмулятором Android — не сахар, потому что он чудовищно медленный.

Начнём с того что он медленно запускается, но даже если использовать для ускорения запуска снапшот состояния, выполнение кода все равно происходит медленно, особенно в режиме отладки.

Тонкая настройка параметров Qemu не слишком помогла — скорость работы эмулятора осталась медленной, возможно именно поэтому большинство разработчиков предпочитает использовать реальные устройства, подключенные по USB.

В любом случае, мне хотелось найти решение, потому что я хотел показывать результат работы приложения на проекторе и не хотел чтобы демонстрируемое приложение тормозило.
Читать дальше →

Скромное руководство по прохождению интервью: часть 2

Reading time5 min
Views20K
Во второй части поста будут рассматриваться “Алгоритмы и концепции”, если вы не читали предыдущий пост или хотите “вспомнить” список тем, то загляните сюда.

Алгоритмы и концепции

Сортировка и поиск

Понимание/знание известных алгоритмов сортировки очень важно, поскольку многие решения связанные с сортировкой или поиском, мягко говоря, требуют владения этими алгоритмами. Хороший способ показать свои знания перед интервьюером, когда дана здача на сортировку – это «пробежать» по известным алгоритмам и увидеть/выяснить какой из них лучше всего подходит для решения данной задачи. Вы получите и решение и то, что интервьюер будет довольным вашими «разными» способов решения одной и той же задачи.
Читать дальше →

Пьеса «Разработка многопользовательской сетевой игры.» Часть 3: Клиент-серверное взаимодействие

Reading time7 min
Views16K


Часть 1: Архитектура
Часть 2: Протокол
Часть 4: Переходим в 3D

С третьей частью я немного задержался. Но как говорится лучше поздно чем никогда…

Итак, продолжаем разговор.

В третьей части нашей постановки мы реализуем протокол, напишем сервер и клиент которые будут взаимодействрвать по сети. И (ОМГ!) танки будут ездить!
Под катом то, что вы давно хотели, но боялись спросить…

Добро пожаловать в зрительный зал.

Учимся считать в hex, или реверс-инженеринг будильника

Reading time13 min
Views55K

Введение


Недавно у меня появилась мысль научиться считать в шестнадцатеричной системе счисления. Так как я человек ленивый, такие способы, как выучить таблицу умножения меня не устраивали. Немного поразмыслив, я вспомнил, что каждое утро решаю (иногда несколько раз) несложный пример, чтобы отключить будильник. Помогает слабо, со временем я начал решать почти не просыпаясь. Так почему бы не совместить полезное с полезным?
Осталось выбрать способ реализации. Так как я не имею не малейшего представления о разработке под андроид (да и вообще с Java не сильно знаком), да и писать свое приложение ради такой мелочи — это стрельба из пушки по воробьям, было решено модифицировать уже имеющийся будильник.

Под катом вы найдете описание инструментов, процесса и результата перевода примера в hex. А также объяснение синтаксиса smali кода (язык опкодов для виртуальной машины dalvik). Картинок почти нет, буков много.
Читать дальше →

Оптимизация под новый прайс

Reading time7 min
Views1.3K
image
App Engine полным ходом идёт к светлому будущему и новой методике расчёта за ресурсы. Паника и хаос вселились в ряды разработчиков под AE — слишком многое держится в строжайшем секрете (или в компании тоже толком не знают что как будет). Но сегодня мы не будем обсуждать, будет ли blobstore включен в бесплатные квоты, или за один лишь доступ к нему придётся платить. Не обсудим куда податься, если новые цены совсем не по карману и не будем говорить о $50 «халявы», которыму гугъл пытается смягчить переход на новые рельсы (тем более, что эту радостную весть разослали всем администраторам приложений).

Сегодня речь будет идти об оптимизации приложений. Вы же уже оптимизировали своё приложение на минимальное потребление процессорного времени и памяти? Забудьте об этом, теперь это вторично и Ваши кровные будут сниматься по другим меркам.
Итак, начнём.

Эмуляция сетевых проблем с помощью WANem

Reading time3 min
Views30K
Картинка для привлечения внимания Недавно один из заказчиков TestLab² пожелал узнать, как будет работать его инсталлятор (с закачкой всякого на лету) на разных каналах. Внезапно первые подходы показали, что нам везет и обычные edge, umts и wimax-каналы (не говоря о проводных) в нашей округе как-то уж очень хорошо работают.
Чтобы создать тяжелые условия мы нашли и применили специализированный инструмент WANem, о котором я расскажу под катом.
Читать дальше →

Fragments API в Android 3.0

Reading time8 min
Views26K
В Android 3.0 введена новая концепция фрагментов, которая служит для упрощения работы с интерфейсом под разные размеры экранов. Данный топик является переводом статьи с android-developers.blogspot.com. В ней рассмотрены преимущества фрагментов, а также приведен простой, но законченный пример приложения, работающего по этому принципу.

Важная цель Android 3.0 — упростить написание программ, которые должны масштабироваться в зависимости от размеров экрана. Для этого в платформе Android уже доступны следующие средства:
  • С самого начала, UI-фреймворк был спроектирован для использования layout managers, которые позволяют описывать интерфейс так, чтобы он «подгонялся» к размерам. Примером этого является ListView, высота которого изменяется в зависимости от размера экрана, который варьируется между соотношениями QVGA, HVGA, and WVGA.
  • В Android 1.6 была введена новая концепция плотности экрана, позволяющая приложениям легче масштабировать размеры между разными разрешениями, в то время как экраны имеют почти один и тот же физический размер. Разработчики незамедлительно начали использовать эту особенность, когда были введены телефоны с высоким разрешением, такие как Droid.
  • Также в Android 1.6 разработчикам стали доступны размеры экрана, при помощи их классификации: «small» для соотношения QVGA, «normal» для HVGA и WVGA, и «large» для более больших экранов. Разработчики могут использовать систему ресурсов для выбора между различными layout'ами, в зависимости от размера экрана

Читать дальше →

Пасьянс маджонг OGS Mahjong вырос до версии 0.8

Reading time2 min
Views713
Стало хорошей традицией писать здесь о развитии проекта OGS и игры OGS Mahjong в частности.
Постоянно свое свободное время проекту отдают два человека: я и kornerr, но в работе над этой версией нам помогли еще два человека, о которых будет сказано ниже.

Даже неторопливая работа приносит свои результаты. Сутки назад вышла версия 0.8.

Читать дальше →

Правильная работа с БД в Android

Reading time7 min
Views154K
Приветствую всех дроидеров в эти непростые для нас времена.
Честно говоря, заколебала эта шумиха о патентах, войнах и т.д., но в данной статье речь пойдет не об этом.
Я не собирался писать статью на данную тему, так как везде всего полно о работе с базой данных в Android и вроде бы все просто, но уж очень надоело получать репорты об ошибках, ошибках специфичных и связанных с БД.
Поэтому, я рассматрю пару моментов с которыми я столкнулся на практике, чтобы предостеречь людей, которым только предстоит с этим разбираться, а дальше жду ваших комментариев на тему решения указанных проблем после чего внесу изменения в пост и мы сделаем отличный туториал, который будет образцом работы с SQLite в Android не только для начинающих, но и для тех, кто уже знаком с основами и написал простые приложения.
Читать дальше →

In-App Purchase в Android приложениях

Reading time3 min
Views91K
1. Что это такое и зачем это нужно?

In-App Purchase, грубо говоря, представляет собой сервис покупки виртуальных товаров внутри приложения (например игровой валюты, новых уровней, игровых предметов и т.д.). Применяется он в основном в играх, в тех случаях, когда встает вопрос о необходимости заработка на своем творении, а распространять его платно не особо хочется (или нет смысла).
Читать дальше →

Карты в вашем Android-приложении

Reading time3 min
Views11K


Довольно часто перед разработчиком мобильного приложения возникает необходимость отобразить что либо на карте. Какие же варианты есть у разработчика?

Я рассматривал два варианта.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity