反射对Android有用吗?



在阅读了这里的一些主题之后,我了解了一些关于反射的知识。据我所知,它用于在运行时检查某个类/方法/字段的可用性。但它在安卓系统中真的有用吗?Android在运行时为我们提供api版本,我们可以通过阅读Android文档(或Android Studio的错误信息)来知道特定的类/方法或字段是否可用。

我理解它如何与Java在一般情况下是有用的,但有任何意义,在Android中使用它?

反射(在任何语言中)都非常强大。

在Android中大多数时候反射是不需要的,因为你可以发现安全异常,问题。这取决于你做什么。

如果你使用未记录的类,库,你可以使用它,它非常有用。

有时候,要做一些特殊的事情,比如在旧设备上打开/关闭3g,改变设备语言,你需要root设备使用反射。

最后,总是取决于你做什么

有时有效,有时无效。

E。工作实例:你可以反映挂断电话的方法(在互联网上有很多示例代码,所以我不会复制代码)。

不工作的例子:如果你想切换数据连接状态,使用反射在4.4上工作,但在5.0上不起作用,因为它是绑定器连接,BN将检查应用程序授予的权限,但此权限仅授予系统应用程序。所以如果你的应用是第三方应用,在5.0中你不能使用反射来切换数据连接状态。

希望有帮助

这是一个非常普遍的问题,它真的取决于你想要做什么。有时候你不得不使用反射,如果api是隐藏的,这取决于你的用例,通常你应该避免反射,因为它会使你的代码比需要的更复杂,并且对android的后续版本可能不安全。

在我看来,这是做特定事情的好方法。例如,你可以使用PowerProfile类的方法为你的手机做一个简单的功率模型。

通过getAveragePower(POWER_WIFI_SCAN)方法,您可以取子系统消耗的平均电流(以mA为单位)(在这种情况下:扫描期间的wi-fi)。

要使用PowerProfile的方法获取电池容量你可以这样使用java反射:

private Object mPowerProfile_;
private static final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";
private Double batteryCapacity = Double.valueOf(1);
public Double getBatteryCapacity(Context ctx) {
    try {
mPowerProfile_ = Class.forName(POWER_PROFILE_CLASS).getConstructor(Context.class).newInstance(this);
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
try {
batteryCapacity = (Double) Class.forName(POWER_PROFILE_CLASS).getMethod("getAveragePower", String.class).invoke(mPowerProfile_, "battery.capacity");
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
}

相关内容

  • 没有找到相关文章

最新更新