这是所有 Android 程序员的问题:
在我的应用程序中使用新旧 API 方法时,我发现了两种处理不同 API 方法的方法。
测试 SDK_INT,如
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { holder.content.setBackground(background); } else { holder.content.setBackgroundDrawable(background); }
编写一个使用反射来测试方法存在的“Compat”类,如
private static final Method sApplyMethod = findApplyMethod(); private static Method findApplyMethod() { try { Class<?> cls = SharedPreferences.Editor.class; return cls.getMethod("apply"); } catch (NoSuchMethodException unused) { // fall through } return null; } public static void apply(final SharedPreferences.Editor editor) { if (sApplyMethod != null) { try { sApplyMethod.invoke(editor); return; } catch (InvocationTargetException unused) { // fall through } catch (IllegalAccessException unused) { // fall through } } editor.commit(); }
现在,后者取自 Carlos Sessa 的一本好书“50 Android hacks”。我被教导使用异常处理来进行流控制是一件坏事,而且不应该这样做。如果您可以针对某些东西进行测试,请不要故意遇到异常处理。因此,方法 2 不会被认为是“干净的”。
但是:在移动设备上,哪个是首选方法?从长远来看,哪个更快?
感谢您的所有意见!