SKD19 vs SDK24 - 使用API​​记录为@since 1.8+

问题描述:

在我的应用程序中有一个错误。 enter image description hereSKD19 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队列数组的容量,因为它可以防止在运行时重新创建更大阵列和复制数组元素

+0

什么是初始容量? – TomTom

+0

@TomTom初始容量意味着它可以容纳的元素数量,它基本上用于节省内存,当您有关于需要存储的元素数量的提示时,尽管其容量在需要时会自动增长 –

+0

非常感谢,这帮了很多 – TomTom

问题不在于PriorityQueue,而是与您正在使用的构造函数。按照文档上here

enter image description 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.