2017-02-02 6 views
1

私はAndroid開発の新機能です。 AndroidでReflection APIの使用に関する質問があります。Androidでのリフレクションの使い方が悪いのですか?

私は、Bluetoothを接続するには、このようにいくつかのコードを書くことができます例については:

 try { 
     Method connectMethod = proxy.getClass().getDeclaredMethod("connect", BluetoothDevice.class); 
     if(!((Boolean) connectMethod.invoke(proxy, device))){ 
      Log.i(TAG, "Unable to start connection"); 
     } else { 
      Log.i(TAG, "Connection Successful"); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, "Unable to reflect android.bluetooth.BluetoothPan", e); 
    } 

同様に他のAPIは、テザリングを設定し、他のstuffsを行うために使用することができます。 これらの機能(セットテザリングなど)は、ユーザーが電話機の設定アプリケーションから行うと想定されています。

これは私の質問です。

  1. Androidの開発で反射を使用することはお勧めしませんか?
  2. これらの機能のカスタム権限を作成し、ユーザー権限に追加すると、設計上サポートされますか?リフレクションAPIアクセスには特別なアクセス許可(ユーザー許可)が必要ないためです。
  3. Androidのデザインパターンごとに、リフレクションAPIを使用するのがタブーですか?
+0

メソッドやフィールドにアクセスするために使用すると、通常はアクセスできなくなりますが、これは間違いなくあなたを薄い氷に置きます。 – Henry

+0

@Henry:あなたの返事をありがとう。しかし、あなたはいくつかの例で説明することができます。私がテザリングだけで動作する1つのアプリを開発していると仮定して、ユーザが設定に行き、手動でテザリングを開始する必要があるたびに、私が反射を使って同じ仕事をしているのなら、私は "薄い氷"の上にいるのですか? – Saby

+1

はい、APIデザイナーがサポートしていないことをしているからです。少しのバージョンアップでも壊れるかもしれません。 – Henry

答えて

1

反射が遅いです。より新しいAndroidバージョンではそれほど悪くはありませんが。リフレクションの大きな問題は、使用するクラスが変更される可能性があることです。コンパイラーが知らないために気付かないことがあります。これは、あなたのコントロール下にないサードパーティのコードや一般消費用ではない内部APIにアクセスするために使用すると、特に悪いことです。このように、一般的には悪い習慣とみなされますが、パフォーマンス上の影響があるため、Android上ではさらにそうです。原則として、私はそれなしで行うことができるリフレクションでは決して何もしません。

-1
  1. はい、それは設計によってサポートされるAndroidの開発に反射を使用する場合、またはどこに考え方を知って良いです。
  2. Androidのデザインパターンごとに、リフレクションAPIを使用するために使用する機能またはアプリに依然として依存します。必要な場合は使用する必要があります。
0

1)可能であれば、反射は避けてください。非常にハッキーで、非常に脆い(アップデートが簡単に壊れます)、メンテナンスが難しく、重要な検証/設定手順をスキップして悪い状況に陥ることがよくあります。ときにはそれが唯一の解決策であることもあります。これらの状況は非常にまれであり、Android開発の在庫にはあまり出てこないことがよくあります。

2)Androidでカスタムユーザー権限を追加することはできますが、ここではそれがどのように関係するかわかりません。ユーザーは、反射が何であるか、いつ使用されるかは分かりません。権限は、特定の操作(場所の使用、通話の使用など)の許可をユーザーに求める必要がある場合に使用します。

3)多少、はい。可能であれば、上記の理由により反射は避けるべきである。

関連する問題