что такое использование @SuppressLint («InlinedApi»)
Я столкнулся с @SuppressLint(«InlinedApi») в некотором коде, который я просматривал, и не мог найти его описания в Интернете. Я понимаю, что @SuppressLint(«NewApi») используется, чтобы скрыть предупреждения, когда мы пишем код, который выше, чем minsdk, упомянутый в манифесте. Но я не могу понять, когда следует использовать «InlinedApi». Любые идеи?
faizal 10 окт. 2013, в 11:52
Поделиться
Хм, это хороший вопрос, я смог найти это Note: Since XY requires Android 3.0 (API version 11) or later, setting your app’s minSdkVersion to 10 or below generates an Android Lint warning in Eclipse with ADK. To turn off this warning, add the annotation @SuppressLint(«InlinedApi& before the definition of XY здесь . Так что, похоже, он делает то же самое, что и «newApi», может быть, это какой-то предшественник?
avalancha 10 окт. 2013, в 09:28
Поделиться:
3 ответа
Лучший ответ
Выполняя lint —list (инструмент lint находится в каталоге sdk/tools ), вы можете увидеть список допустимых идентификаторов проблем. Вы можете найти объяснение InlinedApi там:
«InlinedApi»: находит вложенные поля, которые могут работать или не работать более старыми платформы
stan0 10 окт. 2013, в 10:39
Поделиться
Это было действительно полезно. Я все еще думаю о практической ситуации, когда это необходимо использовать, то есть какой-нибудь пример поля, которое не будет работать на старых платформах?
faizal 10 окт. 2013, в 14:10
Я нашел это.. @SuppressLint ( «InlinedApi» ) Указывает, что Lint должен игнорировать указанные предупреждения для аннотированного элемента.
Exp: SuppressLint implements from Annotation Class. android.annotation.SuppressLint like this.. Built-In Annotations
Java определяет набор аннотаций, встроенных в язык Аннотации к Java-коду: @Override — проверяет, что метод является переопределением. Вызывает ошибку компиляции, если метод не найден в одном из родительских классов или реализованных интерфейсов. @Deprecated — маркирует метод как устаревший. Вызывает предупреждение компиляции, если этот метод используется. @SuppressWarnings — инструктирует компилятор подавлять предупреждения времени компиляции, указанные в параметрах аннотации
http://developer.android.com/reference/java/lang/annotation/Annotation.html http://developer.android.com/reference/android/annotation/SuppressLint.html
harikrishnan 10 окт. 2013, в 12:26
Поделиться
Это общая информация об аннотациях и о тех, которые подавляют предупреждения Lint. Но вопрос здесь конкретно о предупреждении «InlinedApi» Lint.
LarsH 02 фев. 2018, в 17:20
@SuppressLint("InlinedApi") private void hideSystemUi()
Если вы закомментируете @SuppressLint(«InlinedApi») , вы получите это предупреждение:
Поле требует уровня API 19 (текущий мин — 16): android.view.View # SYSTEM_UI_FLAG_IMMERSIVE_STICKY
Итак, вы получаете доступ к полю, который может отсутствовать в API некоторых из устройств, которые, как вы сказали, вы хотите, чтобы запустить устройство. В этом случае, почему это просто предупреждение lint вместо фатальной ошибки компиляции?
Более полное описание предупреждения является приятным и информативным. Вы можете увидеть его в Android Studio, если вы нажмете комбинацию клавиш «Дополнительно» (например, Cmd + F1 ), когда всплывающее сообщение lint будет открыто. Вы также можете получить его через lint в командной строке, аналогично тому, что сказал @stan0, но более подробно:
lint --show InlinedApi
Вот подробное объяснение:
InlinedApi
Сводка: использование встроенных констант в старых версиях
Приоритет: 6/10
Уровень важности: предупреждение
Категория: Правильность
Эта проверка проверяет все ссылки на поля API Android в приложение и флаги, определенные константы, такие как статические конечные целые числа и Strings, которые были представлены в более поздних версиях. Они будут фактически копируются в файлы классов, а не ссылаются на них, что означает, что значение доступно даже при работе на устройства. В некоторых случаях это хорошо, и в других случаях это может привести к во время сбоя или неправильного поведения. Это зависит от контекста, поэтому внимательно изучите код и убедитесь, что он безопасен и может быть подавляется или код нуждается в [sic]. [выделено мной]
Если вы действительно хотите использовать этот API и не нуждаетесь в поддержке более старых устройства просто устанавливают minSdkVersion в файле build.gradle или Файлы AndroidManifest.xml. Если ваш код намеренно обращается к новых API, и вы обеспечили (например, с условным исполнением) что этот код будет когда-либо вызываться на поддерживаемой платформе, тогда вы можете аннотировать свой класс или метод с помощью аннотации @TargetApi указав локальный минимальный SDK для применения, например @TargetApi (11), так что эта проверка рассматривает 11, а не файл вашего манифеста минимальный SDK как необходимый уровень API.
Надеюсь, что с этим объяснением ясно, почему это не является фатальной ошибкой (потому что значение константы копируется в файл класса вместо ссылки), почему это все еще потенциально опасно и когда подавлять предупреждение. В приведенном выше примере codelab автор, по-видимому, решил, что добавление флага, который не будет распознаваться на более старых устройствах, будет безопасным. Возможно, у него была информация о том, что нераспознанные флаги будут игнорироваться, но я не вижу этого в документации .
Suppress Lint. Value Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Набор предупреждений (идентифицируемых идентификатором проблемы lint), которые следует игнорировать при анализе кода.
[Android.Runtime.Register("value", "()[Ljava/lang/String;", "GetValueHandler")] public abstract string[]? Value ();
[] abstract member Value : unit -> string[]
Возвращаемое значение
Комментарии
Набор предупреждений (идентифицируемых идентификатором проблемы lint), которые следует игнорировать при анализе кода. Указание нераспознанного имени не является ошибкой.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Почему не происходит заполнение переменных из потока?
Столкнулся с проблемой, что паршу сайт в android studio на java, узнал, что в основном потоке парсить нельзя и нужно делать это из нового потока, но вот проблема, не получается произвести запись данных в переменные из потока или что-то делаю не так, подскажите пожалуйста, как осуществить запись в данные класса из созданного потока, спасибо
public class MainActivity extends AppCompatActivity < ListView listView; MyListAdapter adapter; ArrayListURL_pict = new ArrayList(); Document doc, doc1; Elements content; ArrayList titleList = new ArrayList(); public ArrayList title = new ArrayList(); public ArrayList subTitle = new ArrayList(); public ArrayList imageID = new ArrayList(); @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new NewThread().execute(); listView = (ListView) findViewById(R.id.listView_id); adapter = new MyListAdapter(MainActivity.this, title, subTitle, imageID); listView.setAdapter(adapter); >public class NewThread extends AsyncTask implements com.example.test_listview.NewThread < @Override protected String doInBackground(String. arg)< try < doc = Jsoup.connect(". ").get(); content = doc.select("p, img"); titleList.clear(); titleList.add(doc.title()); Elements table = doc.getElementsByClass("item-page"); Element page = table.get(0); Elements links = page.select("a[href]"); // picture_preview Elements pict_srcs = page.select("img[src]"); // preview for (Element link : links) < //previewPict int count = 0; String pict_src = "some_links" + pict_srcs.get(count).attr("src").toString(); URL_pict.add(pict_src); count++; doc1 = Jsoup.connect(". " + link.attr("href").toString()).get(); // get header of news Elements titles = doc1.getElementsByClass("item-page"); Element title2 = titles.get(0); Elements head = title2.select("h2"); // main text of news Elements news_texts = doc1.getElementsByTag("p"); Element news_text = news_texts.get(10); title.add("doc.title()"); subTitle.add("news_text.text()"); imageID.add("https://c4.wallpaperflare.com/wallpaper/71/196/981/digital-art-minimalism-nature-hills-wallpaper-preview.jpg"); break; >> catch (IOException e) < e.printStackTrace(); >return null; > >
- Вопрос задан более года назад
- 350 просмотров
2 комментария
Простой 2 комментария
Suppress Lint Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Use ISuppressLint interface instead
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
[Android.Runtime.Register("android/annotation/SuppressLint", DoNotGenerateAcw=true)] [System.Obsolete("Use ISuppressLint interface instead")] public abstract class SuppressLint : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.Annotation.IAnnotation
[] [] type SuppressLint = class inherit Object interface IAnnotation interface IJavaObject interface IDisposable interface IJavaPeerable
Наследование
SuppressLint
Реализации
Комментарии
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Конструкторы
Является устаревшей.
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.
Свойства
Является устаревшей.
Возвращает класс среды выполнения данного объекта Object .
Является устаревшей.
Дескриптор базового экземпляра Android.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.
Является устаревшей.
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.
Методы
Является устаревшей.
Возвращает интерфейс заметки этой заметки.
Является устаревшей.
Создает и возвращает копию этого объекта.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, равен ли какой-то другой объект этому объекту.
Является устаревшей.
Возвращает значение хэш-кода для объекта.
Является устаревшей.
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .
Является устаревшей.
Пробуждает один поток, ожидающий монитора этого объекта.
Является устаревшей.
Пробуждает все потоки, ожидающие на мониторе этого объекта.
Является устаревшей.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Возвращает строковое представление объекта.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Набор предупреждений (идентифицируемых идентификатором проблемы lint), которые следует игнорировать при анализе кода.
Является устаревшей.
Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за или>прерывания или прерывания.>
Является устаревшей.
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем или>прерывания или прерывания<> или до истечения определенного количества реального времени.
Является устаревшей.
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем или>прерывания или прерывания<> или до истечения определенного количества реального времени.
Явные реализации интерфейса
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Методы расширения
Является устаревшей.
Выполняет преобразование типа, проверенного средой выполнения Android.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.
Является устаревшей.
Указывает, что код Lint должен игнорировать указанные предупреждения для элемента с заметками.