Pull to refresh
12
0
Alex Yanchenko @yanchenko

Пользователь

Send message
Или можно использовать одну либу для всего этого: github.com/yanchenko/droidparts Кстати, недавно выпустил версию 2.0.
Из моего опыта, reflection + runtime annotation processing при корректном использовании вполне себе ок в плане производительности. Нет смысла усложнять генерацией кода.
> Забавно, но информация о дженериках полностью не стирается в рантайме.
Да, её можно получить (к моей огромной радости в своё время): github.com/yanchenko/droidparts/blob/master/droidparts/src/org/droidparts/inner/ReflectionUtils.java#L167
Для таких целей лучше использовать Log.wtf(...). (:
Шаблон для создания статических factory-методов, возвращающих Intent(пример):

${:import (android.content.Intent)}

public static Intent getIntent(Context ctx${cursor}) {
	Intent intent = new Intent(ctx, ${enclosing_type}.class);
	return intent;
}
Я вижу два аспекта:
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, там всё просто.
> А какие библиотеки в своем проекте используешь ты, Хабраюзер?

DroidParts, здорово экономит время.
Хочу заметить, что public void onTerminate() на устройствах не вызывается.

Также стоит обратить внимание на ORM-компоненту DroidParts. Там схожий с ORMLite подход, но изначально ориентированный на Android.

Используются Cursorы. С одной стороны, упрощены запросы:

Cursor c = select().columns("_id", "name").where("year", Is.LESS, 1984).execute();

И с другой, есть EntityCursorAdapter c CRUD-методами и

public abstract void bindView(Context context, View view, EntityType item);,

где EntityType — это моделька, считанная из строки курсора c полями, необходимыми для отображения в ListView.
В продолжение темы geek porn от iFixit.
image
Только для совершеннолетних! (:
Есть ли пример приложения, в котором key-value подход повысил производительность?

Бины на Android лучше делать максимально простыми:
class Bean {
    public long id;
    public int number;
    public String title;
    // no getters & setters
}
Оно дополняет. Из доков:
To switch between fragments using the tabs, you must perform a fragment transaction each time a tab is selected.

Этим TabbedFragmentActivity и занимается. По аналогии с прежней TabActivity.

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Date of birth
Registered
Activity