java - read - permission denial starting intent act android media action image_capture




Почему Android использует Java? (6)

Хорошо, это действительно нужно спросить у кого-то из Google, но мне просто нужны другие мнения.

Даже Android поддерживает приложения с внутренним кодом, основным средством разработки является Java. Но почему? Я имею в виду, не слишком ли сложно интерпретировать код на мобильном устройстве? Представляя Froyo, Google сказал, что новый JIT-компилятор может достичь в 2-5 раз быстрее приложений. Это означает, что использование Java поверх собственного кода в 2-х раз медленнее.

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


Java имеет довольно убедительный аргумент для Google, использующего его в Android: у него огромная база разработчиков. Все эти разработчики (вроде) готовы к разработке для своей мобильной платформы.

Имейте в виду, что с технической точки зрения Android не использует чистую Java.


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

Наконец, я бы сказал, что это ставка на будущее - независимо от того, какие проблемы с производительностью существуют, становится неуместным по мере улучшения аппаратного обеспечения - в равной степени, заставляя разработчиков кодоваться против абстракции, Google может вырвать и изменить базовую ОС гораздо легче, чем если бы разработчики кодировали API POSIX / Unix.

Для большинства приложений накладные расходы на использование языка на основе VM по сравнению с родным невелики (узким местом для приложений, использующих веб-сервисы, например Twitter, в основном являются сетевые). Palm WebOS также демонстрирует это - и в качестве основного языка используется JavaScript, а не Java.

Учитывая, что почти все виртуальные машины JIT сводятся к собственному коду, скорость исходного кода часто сопоставима с собственной скоростью. Многие задержки, связанные с языками более высокого уровня, в меньшей степени связаны с накладными расходами виртуальной машины, чем другие факторы (сложное время выполнения объекта, «безопасность», проверяющее доступ к памяти, делая проверку границ и т. Д.).

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

Конечно, есть множество исключений из этого правила - игры, аудио и графические приложения, которые вызывают ограничения на аппаратное обеспечение телефона. Даже в iOS разработчики часто опускаются на C / C ++, чтобы получить скорость в этих областях.


Некоторые моменты:

  1. Java - это известный язык, разработчики знают его и не должны его изучать

  2. сложнее застрелить себя с Java, чем с помощью кода C / C ++, поскольку он не имеет арифметики указателей

  3. он работает на виртуальной машине, поэтому нет необходимости перекомпилировать его для каждого телефона и легко защищать

  4. большое количество инструментов для разработки Java (см. пункт 1)

  5. несколько мобильных телефонов уже использовали Java ME, поэтому Java была известна в отрасли

  6. разница в скорости не является проблемой для большинства приложений; если это так, вы должны закодировать язык низкого уровня


Прежде всего, по словам Google, Android не использует Java. Вот почему Oracle подает в суд на Google. Oracle утверждает, что Android нарушает некоторые технологии Java, но Google говорит, что это Dalvik.

Во-вторых, я не видел интерпретатора байтового кода Java с 1995 года.

Можете ли вы поддержать свою гипотезу о производительности с некоторыми фактическими критериями? Объем ваших презумпций не представляется оправданным с учетом неточной справочной информации, которую вы предоставляете.


Родительский код не обязательно быстрее, чем Java-код. Где ваши данные профиля показывают, что собственный код может работать быстрее?

Почему Java?

  • Android работает на разных аппаратных платформах. Вам нужно будет скомпилировать и оптимизировать свой собственный код для каждой из этих разных платформ, чтобы увидеть реальные преимущества.

  • Существует большое количество разработчиков, уже владеющих Java.

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

  • Java защищает вас от многих проблем, присущих собственному коду, таких как утечка памяти, использование плохих указателей и т. Д.

  • Java позволяет им создавать приложения для песочницы и создавать лучшую модель безопасности, чтобы одно плохое приложение не могло уничтожить всю вашу ОС.


Улучшение стабильности системы очень важно на устройстве, таком как сотовый телефон.

Безопасность еще важнее. Среда Android позволяет пользователям запускать полунадежные приложения, которые могут использовать телефон по-настоящему неприятным образом без превосходной безопасности. Запустив все приложения на виртуальной машине, вы гарантируете, что ни одно приложение не сможет использовать ядро ​​ОС, если в реализации VM не существует недостатка. Реализация ВМ, в свою очередь, предположительно мала и имеет небольшую, четко определенную поверхность безопасности.

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

Кроме того, использование Java делает менее вероятным, что пользователи приложений пишут сами. Отсутствие переполнения буфера, ошибки с указателями и т. Д. ...





android