SKD19 vs SDK24 - 使用API记录为@since 1.8+
问题描述:
在我的应用程序中有一个错误。 SKD19 vs SDK24 - 使用API记录为@since 1.8+
错误表示 - “API的使用记录为@since 1.8+ ..”。
应用程序在sdk 24上运行正常,但是当我在minSDK-19上运行它时,它只是在该错误行上崩溃,其中PriorityQueue在初始化的位置。我检查了PriorityQueue类 - 在API级别1上添加。那么问题在哪里?
问:如何解决?
答
的PriorityQueue (Comparator comparator)在API 24中加入,所以它不是向后与旧版本兼容(minsdk应为24) 可以使用下summary提到构造的任何其他版本,除了这一个。
虽然最近的一个到您当前使用的是一个与初始容量
PriorityQueue (int initialCapacity, Comparator comparator)
其他的解决办法是 您可以将检查针对当前API像
PriorityQueue<Cell> pq;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Nougat) {
pq = new PriorityQueue(new CellComparator());
}else{
pq = new PriorityQueue(50/*initial capacity*/,new CellComparator());
}
其中initial capacity
意思是:PQ内部使用缺省容量的数组作为11
,所以如果您事先了解元素数目,那么最好定义ini队列数组的容量,因为它可以防止在运行时重新创建更大阵列和复制数组元素
答
问题不在于PriorityQueue
,而是与您正在使用的构造函数。按照文档上here
此构造与比较器在API 24被加入,并因此不提供与较低API水平。
你可以试试下面的一个constructor
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
//Creates a PriorityQueue with the specified initial capacity that orders its elements according to the specified comparator.
什么是初始容量? – TomTom
@TomTom初始容量意味着它可以容纳的元素数量,它基本上用于节省内存,当您有关于需要存储的元素数量的提示时,尽管其容量在需要时会自动增长 –
非常感谢,这帮了很多 – TomTom