1

すべての Android プログラマーに質問です。

アプリで古い API メソッドと新しい API メソッドを使用しているときに、異なる API メソッドにアプローチする 2 つの方法を見つけました。

  1. 次のように SDK_INT をテストします

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        holder.content.setBackground(background);
    } else {
        holder.content.setBackgroundDrawable(background);
    }
    
  2. 次のように、リフレクションを使用してメソッドの存在をテストする「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 は「クリーン」とは見なされません。

しかし: モバイル デバイスでは、どのアプローチが望ましいでしょうか? 長い目で見るとどちらが速いですか?

ご意見ありがとうございます!

4

1 に答える 1