use*_*687 2 java android classloader
我创建了一个带有IR Blaster的Android应用程序,我希望我的代码能够检查Android设备是否支持这些库.当另一台设备安装我的应用程序时,它会崩溃.我怎么能避免这个?
我希望我的代码能够获取有关手机是否支持我的应用的信息.
这与加载JDBC驱动程序类似.如果驱动程序不存在,您不希望崩溃整个应用程序.
解决方案的基本原则是使用Class.forName()
这使您可以检查类是否存在,如果不存在则抛出异常.
编辑:
要清楚 - 之所以能够解决这个问题,以及为什么这是必要的,如果Java因为没有类而无法执行代码,那么Java会将此视为灾难性故障(错误 - 特异性为NoClassDefFoundError).因此,执行对缺少的类的任何直接引用都将引发此错误.根据文件:
抛出错误时,应该不会被应用程序代码捕获.
然而,当Class.forName()无法找到一个类(或更直接调用一个类加载器)的异常被抛出.因为这是一个例外而不是错误,它可以被捕获.并且因为函数将String作为参数,所以您不需要直接引用该类(只是在字符串中给出它的名称),因此可以在不直接引用类的情况下执行检查,从而不会使程序崩溃.