如果我使用"if(android.os.Build.VERSION.SDK_INT> = 11)",则需要反射吗

Ten*_*r04 6 android

我正在开发一个针对API 11(3.0)的应用程序,但minSDKVersion为7(2.1).

我以编程方式而不是XML方式生成PreferenceActivity.在Honeycomb中,首选项布局有一个内置的图标位置,可以在每个首选项旁边显示.您可以使用它进行设置prefScreen.setIcon(R.drawable.my_icon);

所以我不想在API 7-10上这样做.这是否足以防止崩溃?

if (android.os.Build.VERSION.SDK_INT>=11)
    prefScreen.setIcon(R.drawable.myIcon);
Run Code Online (Sandbox Code Playgroud)

我知道更安全的解决方案是在尝试使用它之前使用反射来检查该方法是否存在.

Lea*_* ES 10

根据http://developer.android.com/training/basics/activity-lifecycle/starting.html,暗示在Android 2.0及更高版本上使用SDK_INT常量来安全地调用更新的API,而不使用反射是安全的.

警告:使用SDK_INT阻止旧系统执行新API只能在Android 2.0(API级别5)及更高级别上运行.旧版本将遇到运行时异常.

  • 对不起,如果两年后再回来并改变接受的答案是不好的形式,但这个答案现在是正确答案.Lint提供警告,以帮助您避免调用不可用的方法时出错. (2认同)