Я убираю это из комментариев, чтобы было понятнее для других, рассматривающих этот вопрос в будущем.
При поддержке как старых, так и новых версий Android может возникнуть путаница в том, как приложения запускаются, несмотря на то, что во всех новых версиях во время каждого выпуска меняются многие аспекты, поэтому я попытаюсь уточнить это здесь.
Приложение, написанное для SDK 1.5, может вызывать только те функции, которые существуют для этого уровня API, поэтому, например, API multi touch не существует в 1.5 и никогда не будет. Теперь вы говорите: «Хорошо, но мне не нужно вызывать какие-либо более новые API, я просто хочу, чтобы мое приложение работало в 2.3 и имело поддержку a2sd». И я говорю: «Хорошо, просто измените targetApi в манифесте, установите minSDK и скомпилируйте против 2.3, и все готово. "
Теперь, почему это работает? Что, если метод onMeasure () для ListView
был изменен в 2.2 и теперь вызывает betterCalculateFunction () в onMeasure ()? Почему мое приложение все еще работает?
Это преимущество позднего связывания в Java. Видите ли, Java никогда не компилируется до тех пор, пока не достигнет устройства и не запустится, то, что вы делаете в Eclipse, это конвертируете его в байт-код, который содержит набор инструкций байт-кода, которые позже интерпретируются устройством. Байт-код НИКОГДА не будет содержать ссылку на betterCalculateFunction (), хотя (если вы не вызываете его напрямую. Вызов onMeasure () является косвенным). Это может произойти, потому что, когда ваш код выполняется на устройстве, он связывается с платформой Android на устройстве, и ваш код вызывает метод непосредственного вызова метода (), потому что это открытый API-интерфейс, обращенный наружу. После этого путь выполнения войдет в структуру и вызовет все, что ему нужно, а затем вернется к вашему коду.
Итак, на 1.5 вы можете увидеть
doStuff (ваш код) -> onMeasure
(общедоступный API) -> сделано
и 2,2
doStuff (ваш код) -> onMeasure
(публичный API) ->
betterCalculateFunction (private)
функция) -> сделано
Теперь, если вам нужно вызывать функции, которые могут существовать или не существовать в зависимости от уровня API, тогда я предлагаю вам посмотреть на мой соответствующий ответ здесь stackoverflow: изящно понизить версию вашего приложения
Надежда, которая проясняет некоторые вещи.