我是Android开发的新手。我有一个关于在Android中使用Reflection API的问题。
例如,我可以编写一些这样的代码来连接蓝牙:
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可用于设置网络共享和其他内容。 这些功能(如集合网络共享)应该由用户在手机中设置应用程序来完成。
这些是我的问题吗?
答案 0 :(得分:2)
反思有点慢。虽然在较新的Android版本上它并没有那么糟糕。反射的一个大问题是你使用的类可能会改变,你不会注意到,因为编译器不知道。当您使用它来访问不受您控制的第三方代码或不适合公共使用的内部API时,这尤其糟糕。因此,它被认为是一般的不良做法,但由于性能影响,在Android上更是如此。作为一项规则,我绝不会做任何可以在没有它的情况下完成的事情。
答案 1 :(得分:1)
1)如果可能,应避免反思。它非常hacky,非常脆弱(在更新时容易中断),难以维护,并且通常会跳过重要的验证/设置步骤,从而使您陷入困境。有时它是唯一的解决方案 - 这些情况非常罕见,并且通常不会出现在Android开发中。
2)您可以在Android中添加自定义用户权限,但我不知道这与此相关。用户将不知道反射是什么或何时使用。当您需要要求用户授权某些操作(使用位置,拨打电话等)时,应使用权限。
3)有点,是的。如果可能的话,应该避免反思,原因如上所述。
答案 2 :(得分:-1)