调用未来API提供的方法

时间:2013-04-24 13:29:28

标签: java android reflection

我想扩展我的previous question

如果在我的代码中有未来API提供的方法,如果我检查版本,我在LogCat中有以下警告

04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V

在我的情况下(参见链接问题)我可以使用反射解析

try {
    Method m = ViewTreeObserver.class.getMethod("removeOnGlobalLayoutListener", OnGlobalLayoutListener.class);
    m.invoke(observer, listener);   
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

我的问题是:最好使用反射并避免警告,否则最好忽略避免反射的警告?

我的反思代码没有捕获异常,但我不确定它是否正确,是吗?

1 个答案:

答案 0 :(得分:0)

警告只是一个警告,在执行过程中不会造成任何问题。

使用反射和异常处理测试方法的存在成本高昂,应尽可能避免使用。

您应该Build.VERSION.SDK_INT常量来检查您实际运行的平台

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
   // Do something using Gingerbread API
else {
   // Workaround for earlier version of android
}