すべての Android プログラマーに質問です。
アプリで古い API メソッドと新しい API メソッドを使用しているときに、異なる API メソッドにアプローチする 2 つの方法を見つけました。
次のように 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 は「クリーン」とは見なされません。
しかし: モバイル デバイスでは、どのアプローチが望ましいでしょうか? 長い目で見るとどちらが速いですか?
ご意見ありがとうございます!