方法A(传统方法):
方法B:
在onBindViewHolder(不使用ArrayList)中迭代jsonArray并将setValues直接复制到textViews,imageViews等,如下所示:
@Override
public void onBindViewHolder(Holder holder, int i) {
try {
holder.textView.setText(jsonArray.getJSONObject(i).getString("textKey"));
} catch (JSONException e) {
e.printStackTrace();
}
}
由于我没有使用模型类和ArrayList,因此使用第二种方法时,性能会有任何改善。
性能会降低还是保持不变。
我不在乎可读性,这里我唯一关心的就是性能。
注意:-using try catch multiple times has no effect on performance,所以我们可以忽略它。
答案 0 :(得分:2)
使用第二种方法时,性能会有任何改善 方法,因为我们没有使用模型类和ArrayList。
性能会降低还是保持不变。
我不在乎可读性,这里我唯一关心的就是性能。
使用方法B 会导致性能下降,因为每当您拨打以下电话时,您都会有额外的通话:
holder.textView.setText(jsonArray.getJSONObject(i).getString("textKey"));
如果您打破上面的那一行,那就是这样的:
holder.textView.setText()
jsonArray.getJSONObject(i)
JSONObject.getString("textKey")
您应注意,JSONObject.getString("textKey")
需要做一些繁重的工作才能通过调用以下getString method code来用键textKey
查找值:
public String getString(String name) throws JSONException {
Object object = get(name);
String result = JSON.toString(object);
if (result == null) {
throw JSON.typeMismatch(name, object, "String");
}
return result;
}
您可以看到还有另外一个使用JSON.toString(object)
的JSON对象方法调用:
static String toString(Object value) {
if (value instanceof String) {
return (String) value;
} else if (value != null) {
return String.valueOf(value);
}
return null;
}
因此(尽管可以忽略不计),您的性能会受到打击。
最糟糕的部分是以下行:
holder.textView.setText(jsonArray.getJSONObject(i).getString("textKey"));
每当回收View时,总是会调用。因此,性能提升成倍增加。