我使用IR blaster创建了一个Android应用程序,我希望我的代码能够检查Android设备是否支持这些库。当另一台设备安装我的应用程序时,它会崩溃。我怎么能避免这个?
我希望我的代码能够获取有关手机是否支持我的应用的信息。
答案 0 :(得分:5)
这与加载JDBC驱动程序类似。如果驱动程序不存在,您不希望崩溃整个应用程序。
解决方案的基本原则是使用Class.forName()
这使您可以检查该类是否存在,如果不存在则抛出异常。
修改强>
要清楚 - 之所以能够解决这个问题的原因以及为什么必需,如果Java因为没有类而无法执行代码,那么Java会将此视为灾难性的失败(Error - 特异性a NoClassDefFoundError)。因此,执行对缺少的类的任何直接引用都将引发此错误。根据{{3}}:
当抛出错误时,不应该被应用程序代码捕获。
但是当Class.forName()
无法找到某个类(或更多直接调用documentation)时,会抛出ClassLoader。因为这是一个例外而不是错误,它可以被捕获。并且因为函数将String作为参数,所以您不需要直接引用该类(只需在字符串中给出它的名称),这样就可以在不直接引用类的情况下执行检查,从而不会导致程序崩溃。 / p>