Jun 14, 2012 23:04
После выхода макбук про ретина, пошли слухи, что началась фрагментация. Я решил написать, что я думаю о фрагментации, так как многие я считаю пользуются этим термином не совсем правильно.
Фрагментация для меня это когда программистам нужно писать одну и туже программу, но в нескольких версиях для каждого определенного устройства и каждое нуждается в тестировании, у каждого свои примочки и свои проблемы, что затрудняет разработку. Самый лучший пример фрагментации это телефоны с J2ME, дело в том, что имплементации JSR не обязательны в многих случаях, например, телефон самсунг пишет, что он поддерживает MIDP 2.0, в эту спецификацию входит, JSR135, т.е. мультимидия, такая как например доступ к камере, но в самсунге решили например этого не делать на телефоне скажем D600, и поэтому хоть ваша программа и написана под J2ME с поддержкой MIDP 2.0 она работать не будет.
Если вы еще помните как качали файлы с java, то вспомните сколько их существовало под каждое устройства, сотни!
Теперь вернемся к смартфонам, ios и андроид, в обоих например можно использовать для разработки последнюю версию SDK, но при этом указать минимальную версию прошивки при которой ваша программа должна работать. Дальше, например в ios, так как objective-c динамический язык, можно проверить существует ли какой то именно класс в системе когда программа работает, например в версии 3.0 есть LocationManager а в 2.0 его нет, вы прежде чем использовать всегда можете проверить наличие этого API и тем самым ваша программа будет работать так как вы задумали для всех платформ. Заметьте не во время компиляции а во время работы программы.
Проблему графики в iOS решили следующим образом, так как сейчас есть 2 резолюции для айфона и 2 резолюция для айпада у вас файлы для меньшей резолюции имеют просто название файла, а для высокой резолюции название файла плюс @2х, тогда в коде программы вы просто пишете [NSImage imageNamed:@myimage.png], если оба файлы присутствуют то для устройств с меньшей резолюцией выбирается первый файл, а для высокой @2х, система сама это распознает.
С выходом Lion, Apple сделала интерфейсы не абсолютными а относительным, т.е. можно создавать интерфейс относительно компонентов, тогда при изменении размера программы все увеличивается относительно того как вы задумали. Тем самым при более высокой резолюции все работает правильно. Все что вы пишете будет работать на любой версии продуктов Apple. Objective-C и здесь позволяет программировать все в реальном времене и использовать новые фичи в новых версиях, а в старых старые.
В Андроид, все тоже динамически и тоже можно задавать минимальную поддержку API, но проблема заключается в том, что у каждого устройства своих глюки, например, Skype, должен по идеи работать на всех версиях андроид телефонов у которых есть камера, а так же если есть вторая камера то позволять совершать видео звонки, так как есть Camera API, которые при использовании должны работать везде, но при этом на том же Orange San Francisco II, в котором стоит 2.3.5 Skype вообще не видит камер.
Вот именно это я называю фрагментацией, во времена Symbian тоже были такие проблемы когда хоть вы и писали например под S60 3rd Edition, на разных телефонах это работало по разному, это и есть фрагментация.
А когда вам просто нужно добавить новый интерфейс или увеличить графику, это все таки все равно остается один установочный файл а не несколько разных для разных версий и прошивок!
:)
ios.,
fragmentation,
android