Что означает "Этот метод устарел" означает для разработчиков приложений

Я вижу довольно много добрые старые полезные методы или даже целые классы, которые "устарели и устарели".

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

  • Продолжайте использовать этот метод, пока я хочу, потому что новые SDK всегда будет поддерживать обратную совместимость.
  • Он будет работать до тех пор, пока я создаю для более старых целей (например, API 8), но если я буду строить из API 14, компилятор откажется завершить сборка.
  • Оба (1) и (2)
  • Другое?

Это особенно сбивает с толку, когда альтернативы не предоставляются, как в случае WebView.PictureListener.html#onNewPicture.

Ответ 1

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

Что касается onNewPicture, в частности, весь интерфейс PictureListener устарел. Нет никаких признаков того, что, если что-либо, должно заменить его. Комментарий @CommonsWare в этой теме - это пища для размышлений:

Можно предположить, что изменения в верхнем течении в WebKit приводят к устареванию, и поддержка PictureListener может быть полностью потеряна в будущем выпуске.

Ответ 2

Я бы пошел с 4:

В основном будет сказано, что использование метода или класса не рекомендуется; это не 100%, что они будут поддерживать обратную совместимость (они могут решить не включать этот метод в будущие версии), поэтому вы должны попытаться использовать замену метода или класса. Иногда не удается использовать новые методы (например, если вы хотите поддерживать устройства, работающие с более старыми версиями).

В некоторых других случаях это возможно. Например, метод showDialog теперь устарел, и они рекомендуют использовать класс DialogFragment. Вы можете добиться этого даже в более старых версиях Android с помощью библиотеки совместимости.

Ответ 3

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

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

Ответ 4

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

Показательный пример. Google, в android release 2.3, не одобрял многие, но не все методы API, которые позволяли записывать звонки. Они компилируют ОК, но не работают с Android 2.3 и переадресовываются на любое устройство Android или планшет с возможностями телефона.

Ответ 5

В качестве примера для устаревшего интерфейса, который был удален на более позднем уровне API, рассмотрим пакет org.apache.http: он был устарел в API уровня 22 и удалены в API уровне 23.

Конечно, на реальных устройствах Android классы, содержащиеся в этом пакете, по-прежнему будут доступны в системных библиотеках (в противном случае приложения, предназначенные для более ранней версии Android, больше не будут работать на этом устройстве).

Однако они больше не доступны в SDK, поэтому компиляция не удастся, если вы не измените SDK цели/сборки на более старую версию (или вручную включите устаревшие классы).

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