Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
#1

Что такое Рефлексия? Как быть с deprecated? - Программирование Android

26.02.2013, 16:03. Просмотров 3861. Ответов 30
Метки нет (Все метки)

Предполагаю, рефлексия в данном случае - это когда одним методом получаешь другой метод для использования, динамически. ?
Deprecated - насколько я понимаю, если что-то устарело, то дальнейшая поддержка не гарантированна и оно может быть вообще исключено в дальнейших версиях?
Собственно задача, что делать если метод/класс устарел (deprecated), а нужно чтобы приложение работало на всех версиях?
Нужно как-то на меньшей версии (где гарантированно есть ещё этот deprecated метод/класс) - именно его и использовать, а на большей версии - использовать уже нововведенный аналог.
Наверное, в этом случае и пригодится рефлексия, но опять же, вроде где-то видел, что рефлексия была запрещена на андроиде (наверное от какой-то версии ОС). ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое Рефлексия? Как быть с deprecated? (Программирование Android):

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future - Программирование Android
Здравствуйте! Сделал пример http://devcolibri.com/1486 со сборкой денвер сделал все в порядке, работает) дальше решил сделать свою...

Разъясните гуру как такое может быть! - Программирование Android
Купил Навигатор с регистратором. На андроиде. Но андроид какой-то порезаный.нет маркета. нет вообще ничего. только то что установлено....

Что и зачем такое appcompat_v7 - как убрать ? - Программирование Android
День добрый! При создании проекта в Eclipse: Android Application Project создается еще один appcompat_v7 - раньше такова не было, и...

Как правильно начать что бы не быть привязаным к одной технологии/языку? - Программирование
Всем привет. Хочу начать писать под iOS (есть:Macbook Pro, iPhone 5, деньги на аккаунт разработчика) В программировании опыта нет...

Как поступать если метод стал deprecated? - Программирование Android
Доброго дня! Как поступать если метод стал deprecated? Например, getColorStateList() устаревший с 23 api. Что использовать на тех...

Что такое "кэш" в android? Как можно программно сохранить что-то в кэш? - Программирование Android
что такое КЭШ в android? как можно программно сохранить что то в кэш??можете дать ссылку??

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 20:46 #16
у меня такой проблемы не наблюдается. выложите проект.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
26.02.2013, 22:12  [ТС] #17
Java
1
2
3
4
5
6
7
8
final class testCrash{
    
    public static String str = "testCrash created";
    
    public static void crash(){
        System.out.println("Build.VERSION.SDK_INT: " +Build.VERSION.SDK_INT); //API4
    }
}
В MainActivity:
System.out.println("main start");
System.out.println("testCrash.str: " +testCrash.str);

Запускаем на андроиде меньше API4 и получаем краш, хоть и к testCrash.crash() не обращались!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 00:12 #18
где же такой древний андроид взять?) (эмулятор не перевариваю)
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
27.02.2013, 00:40  [ТС] #19
так вот эмулятор для таких целей и нужен.
Видимо в это и суть, на более младших андроидах краши есть, а выше нет.
Так вот если заменить на какой-то метод введенный в API17 и запустить пример на API16 то краша не будет, пока не обратимся прямо к testCrash.crash(), ну а на том же API3 - в любом случае краш.

Хоть андроид то и древний, но всё же используется ещё. Вот только что промониторил логи своего веб сервера - есть андроиды и 1.5 и 1.6.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 00:47 #20
как уже писал, на API10 писал методы с API15, крешей не было.

Добавлено через 22 секунды
а эмулятору я никогда не доверял.

Добавлено через 1 минуту
http://habrastorage.org/storage2/2bb...3a71b32e89.png
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
27.02.2013, 00:57  [ТС] #21
Ну API10 мне не интересен. В данном случае, я столкнулся со сменной класса в API4.

Я тоже тестирую основную работу на реальных устройствах, но если вот такие моменты возникают, то можно и на эмуле посмотреть. Всё же лутше чем ничего.

Даже 0.1% довольно большая цифра если рассматривать андроид в целом.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 01:02 #22
и этот 0.1% наверное маленькие дети которым родители отдали свои старые девайсы

Добавлено через 23 секунды
ладно, щас попробую на эмуляторе протестить ваш код.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
27.02.2013, 01:15  [ТС] #23
Ну так не факт что краш только на андроиде 1.5, я выше не тестировал.
Да и разве проблема перенести код в отдельный клас чтобы небыло краша, чтобы не терять на ровном месте даже этих 0,1%.

Добавлено через 3 минуты
на 1.6 тоже краш

Добавлено через 1 минуту
на 2.0 уже краша нет
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 01:37 #24
действительно, на API3 такой трюк не проходит, но на API8 никогда не замечал подобных ограничений, ниже API8 никогда не сапортили...

Добавлено через 4 минуты
Цитата Сообщение от elf32 Посмотреть сообщение
ровном месте даже этих 0,1%
а сколько из этих 0,1% скачает ваше приложение?)

Добавлено через 58 секунд
писать отдельный код для 0.1% девайсов никто не станет.

Добавлено через 4 минуты
думаю почти все из этих 0,1%, это те кто умеют(или им только это и нужно от девайса) только звонить - старики и дети(до 8 лет) например.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
27.02.2013, 01:53  [ТС] #25
0.1% на 1,5
0,3% на 1,6
вместе уже 0,4%

Почему никто не станет писать отдельный код? У каждого свои задачи. Например мне, важны все версии и я готов переписать класс под две версии андроида.

а сколько из этих 0,1% скачает ваше приложение?)
Елементарно, по логика, из 100% скачавших приложение, 0,1% из них будет андроид 1,5. 0,3% андроид 1,6
Хотя, на практике куда меньше.

Добавлено через 2 минуты
Даже и не объязательно писать отдельный код, а достаточно его просто вынести в отдельный класс и не использовать если API девайса меньше API кода.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 02:01 #26
Цитата Сообщение от V0v1k Посмотреть сообщение
думаю почти все из этих 0,1%, это те кто умеют(или им только это и нужно от девайса) только звонить - старики и дети(до 8 лет) например.
тесть, например, если из тех кто имеет андроид API8 80% умеют скачивать приложения, то из тех кто имеет API3 только 1% умеют скачивать приложения, соответственно будет не 0,1% от скачавших, а например 0,1/80.
и это я еще не упомянул об предпочтениях этих разных категорий...


ну это так для примера инфа....

Добавлено через 51 секунду
Цитата Сообщение от elf32 Посмотреть сообщение
Даже и не объязательно писать отдельный код, а достаточно его просто вынести в отдельный класс и не использовать если API девайса меньше API кода.
ну я не говорил отдельную APK, а просто отдельный код, в смысле дополнительный код.

Добавлено через 2 минуты
сами подумайте в чьих руках древние телефоны и в чем такие люди заинтересованы.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
27.02.2013, 02:04  [ТС] #27
Ну я же сказал, у каждого свои задачи. Может быть такая специфика, что от пользователя и не нужно никаких умений по установке и использованию (например rat).
Тема не об этом же. Мы обсуждаем маркетинг и реализацию продукта, а меня интересует техническая сторона приложения.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 02:17 #28
ну, техническую сторону уже выяснили)
с практической стороны тоже смотреть нужно.
еще представьте как быстро этот 0.1% стремится к нулю при многомиллионных ежесуточных продажах новых девайсов.

Добавлено через 8 минут
просто часто взглядом с практической стороны определяю что человек или делает то, что не нужно, или выбрал неправильный подход или неправильный инструмент.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
27.02.2013, 15:16 #29
если вам надо использовать апи которые добавились в более поздних версиях то можно использовать метод реализованный как тут.
посмотрите пакеты camera и common для примера. Вы поймёте как задейстовать дополнительное апи при достижении определённого апи левела.
там подключаетсяапи управления выдержкой камеры котрытием камеры, асинктаск как использовать на более поздних версях. в общем я думаю это хороший пример. и да, там используется рефлексия.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
27.02.2013, 17:17 #30
ну, там рефлексия решает вопрос проектирования, а вообще хороший подход.

Добавлено через 18 минут
а конкретно поддержку множества реализаций одного интерфейса, хотя может я не во все классы заглянул...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 17:17
Привет! Вот еще темы с ответами:

Что такое system_process - Программирование Android
В Android Studio в отладке есть выбор запущенных пакетов + system_process - что это за процесс?

Что такое Jsoup? - Программирование Android
JSOUP это тоже самое что JSON в андроид?? JSOUP чем отличается от JSON??

Что такое Maven? - Программирование Android
В уроке 161 startandroid есть такое замечание для тех, кто хочет протестировать библиотеку Picasso: Подскажите пожалуйста, что это...

Что такое хэширование? - Программирование Android
Можете обьяснить что такое хэширование как это понимать??Я в википедии читал что это преобразование входной строки в массив бит. Так вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2013, 17:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru