Или можно использовать одну либу для всего этого: github.com/yanchenko/droidparts Кстати, недавно выпустил версию 2.0.
Из моего опыта, reflection + runtime annotation processing при корректном использовании вполне себе ок в плане производительности. Нет смысла усложнять генерацией кода.
Я вижу два аспекта:
1) Как на той картинке с перевёрнутым дымящимся самолётом «Россия», командир Путин которого предлагает пассажирам поговорить о гомосексуализме. Т.е. манипуляция, направленная на смещение акцентов с критически важных вопросов.
2) Суть экономики, как остновы современного мироустройства, в использовании ресурсов и обмене, являющимся следствием их ограниченности. Начиная с природных и заканчивая более высокого порядка, типа потребителей товаров и услуг. Развитие ИТ создало возможность «безвозмездного» потребления неисчерпаемого информационного ресурса (софт, видео, музыка, т.д.). Это противоречит основам системы. Пути два. Или силой залатать возникнувшую дырку, что мы наблюдаем в современном мира. Или эволюционировать систему, о вариантах я бы хотел почитать.
Volley вызывет у меня чуть большее негодование, чем авторы, оставляющие в коде // TODO Auto-generated method stub.
Они предлагают вместо ImageView использовать NetworkImageView и вызывать public void setImageUrl(...). Это ужасный дизайн, когда вьюха привязывается к источнику данных.
Ещё про картинки. Они не используют inBitmap. Хотя это известный вопрос, ему даже посвящён выпуск DevBytes.
Затем, c json они делают ту же глупость, что и создатель android-async-http: объект загружается в фоне, но возвращается в UI потоке. Т.е. вся работа с json будет уже в main thread. Ну или же нужно запускать что-то (типа AsyncTask), что обработает его в фоне.
LruCache? Не, не слышали. Вообще, складывается впечатление, что у них была задача написать либу с минимальным использованием стандартных компонент Android. И свалить всё в кучу.
VolleyError(и его наследники), который на самом деле не Error, а Exception.
В общем, по моему мнению, эта либа — пример посредственного дизайна, и лучше бы она из недр Play Store не вылазила.
Посмотрел Hands-on with iOS 7 [video] на 9to5mac, поставил XCode 5, с горя напился.
Инновации, бесмысленные и беспощадные. В теперешнем стиле Microsoft.
1. В статической переменной, если Activity убивается.
2. Я обычно реализую общение через базу, так что передаётся только id. Если нужно передавать несереализуемое, то стоит задуматься о дизайне. Привязывать синхронно не приходилось. Не-а, IntentService работает в отдельном потоке по умолчанию.
Результат передаётся через AsyncTaskProgressListener, AsyncTaskResultListener, в которых Views можно подменять при повороте.
В чём преимущество самописного перед IntentService?
У каждого свой подход.
Утечки контекста нет, т.к. там getApplicationContext().
Для регулярных фоновых тасков я использую IntentService. ExecutorServices — это уровень AsyncTask или org.droidparts.net.image.ImageFetcher workers.
Также рекомендую взглянуть на мою библиотеку DroidParts: https://github.com/yanchenko/droidparts, значительно упрощающую рутинные операции. С недавних пор доступна в Maven Central.
Спасибо за фидбек.
1. Сначала классы имели префикс DP, т.е. DPActivity, но я быстро отказался от этой идеи, т.к. Objective-C-style и вообще есть в urbandictionary. (: Называть вроде DroidPartsActivity — тоже неочень.
Текущий вариант — дело правильного выбора при autocomplete. Плюс — нет визуального мусора.
2. Уже есть: droidparts-modern-native
3. В версии 0.8.5 переименованы для удобства пользователей Idea. В Eclipse такой проблемы нет.
4. Навскидку, текущая версия в Idea 12 импортируется. Более подробно не занимался, т.к. то, что Idea делает с Android library-проектами, выносит мозг уже мне.
5. Да, это TODO. Сам функционал есть в примере DroidPartsGram, пока нужно читать код.
6. Небрежность — хм. RESTClient2 наследует RESTClient и добавляет фунционал. По-моему, логично.
7. Не понял идеи и проблемы если честно. Какие ограничения вносит droidparts? Можно на SO: stackoverflow.com/questions/tagged/droidparts
8. Тут накладывается видение структуры проекта Idea. Корневой package name всех модулей — да, одинаковый.
9. Кофиг в Manifest уже документирован
В общем, да, нужно уделить больше внимания описанию особенностей.
Спасибо!
Уже есть мануал в процессе написания на droidparts.org и пара работающих приложений в /sample. Из последних лучше начать с DroidPartsGram, там всё просто.
Из моего опыта, reflection + runtime annotation processing при корректном использовании вполне себе ок в плане производительности. Нет смысла усложнять генерацией кода.
Да, её можно получить (к моей огромной радости в своё время): github.com/yanchenko/droidparts/blob/master/droidparts/src/org/droidparts/inner/ReflectionUtils.java#L167
Log.wtf(...)
. (:Intent
(пример):Intent
: github.com/yanchenko/droidparts/tree/master/droidparts/src/org/droidparts/util/intent1) Как на той картинке с перевёрнутым дымящимся самолётом «Россия», командир Путин которого предлагает пассажирам поговорить о гомосексуализме. Т.е. манипуляция, направленная на смещение акцентов с критически важных вопросов.
2) Суть экономики, как остновы современного мироустройства, в использовании ресурсов и обмене, являющимся следствием их ограниченности. Начиная с природных и заканчивая более высокого порядка, типа потребителей товаров и услуг. Развитие ИТ создало возможность «безвозмездного» потребления неисчерпаемого информационного ресурса (софт, видео, музыка, т.д.). Это противоречит основам системы. Пути два. Или силой залатать возникнувшую дырку, что мы наблюдаем в современном мира. Или эволюционировать систему, о вариантах я бы хотел почитать.
// TODO Auto-generated method stub
.Они предлагают вместо
ImageView
использоватьNetworkImageView
и вызыватьpublic void setImageUrl(...)
. Это ужасный дизайн, когда вьюха привязывается к источнику данных.Ещё про картинки. Они не используют inBitmap. Хотя это известный вопрос, ему даже посвящён выпуск DevBytes.
Затем, c json они делают ту же глупость, что и создатель android-async-http: объект загружается в фоне, но возвращается в UI потоке. Т.е. вся работа с json будет уже в main thread. Ну или же нужно запускать что-то (типа
AsyncTask
), что обработает его в фоне.LruCache
? Не, не слышали. Вообще, складывается впечатление, что у них была задача написать либу с минимальным использованием стандартных компонент Android. И свалить всё в кучу.VolleyError
(и его наследники), который на самом деле неError
, аException
.В общем, по моему мнению, эта либа — пример посредственного дизайна, и лучше бы она из недр Play Store не вылазила.
Инновации, бесмысленные и беспощадные. В теперешнем стиле Microsoft.
2. Я обычно реализую общение через базу, так что передаётся только id. Если нужно передавать несереализуемое, то стоит задуматься о дизайне. Привязывать синхронно не приходилось. Не-а, IntentService работает в отдельном потоке по умолчанию.
AsyncTaskProgressListener
,AsyncTaskResultListener
, в которых Views можно подменять при повороте.В чём преимущество самописного перед
IntentService
?Утечки контекста нет, т.к. там
getApplicationContext()
.Для регулярных фоновых тасков я использую
IntentService
.ExecutorService
s — это уровеньAsyncTask
илиorg.droidparts.net.image.ImageFetcher
workers.1. Сначала классы имели префикс DP, т.е. DPActivity, но я быстро отказался от этой идеи, т.к. Objective-C-style и вообще есть в urbandictionary. (: Называть вроде DroidPartsActivity — тоже неочень.
Текущий вариант — дело правильного выбора при autocomplete. Плюс — нет визуального мусора.
2. Уже есть: droidparts-modern-native
3. В версии 0.8.5 переименованы для удобства пользователей Idea. В Eclipse такой проблемы нет.
4. Навскидку, текущая версия в Idea 12 импортируется. Более подробно не занимался, т.к. то, что Idea делает с Android library-проектами, выносит мозг уже мне.
5. Да, это TODO. Сам функционал есть в примере DroidPartsGram, пока нужно читать код.
6. Небрежность — хм. RESTClient2 наследует RESTClient и добавляет фунционал. По-моему, логично.
7. Не понял идеи и проблемы если честно. Какие ограничения вносит droidparts? Можно на SO: stackoverflow.com/questions/tagged/droidparts
8. Тут накладывается видение структуры проекта Idea. Корневой package name всех модулей — да, одинаковый.
9. Кофиг в Manifest уже документирован
В общем, да, нужно уделить больше внимания описанию особенностей.
Спасибо!
/sample
. Из последних лучше начать с DroidPartsGram, там всё просто.DroidParts, здорово экономит время.
public void onTerminate()
на устройствах не вызывается.Также стоит обратить внимание на ORM-компоненту DroidParts. Там схожий с ORMLite подход, но изначально ориентированный на Android.
Используются Cursorы. С одной стороны, упрощены запросы:
Cursor c = select().columns("_id", "name").where("year", Is.LESS, 1984).execute();
И с другой, есть
EntityCursorAdapter
cCRUD
-методами иpublic abstract void bindView(Context context, View view, EntityType item);
,где
EntityType
— это моделька, считанная из строки курсора c полями, необходимыми для отображения вListView
.Только для совершеннолетних! (:
key-value
подход повысил производительность?Бины на Android лучше делать максимально простыми:
Этим
TabbedFragmentActivity
и занимается. По аналогии с прежнейTabActivity
.