一、含义
这两个注解的作用仅仅是让编译通过,而并没有避免低版本的系统运行高版本的api的问题,在使用时我们需要自己判断版本号来使用不同的api。 目前官方建议使用@RequiresApi。
即使在方法添加了@RequiresApi,代码还是会往下执行,执行到低版本手机中不存在的方法时,会报错java.lang.NoClassDefFoundError: Failed resolution of.
所以正确的做法是加上版本判断来适应不同的版本。
二、正确的处理方式
import android.icu.text.DecimalFormat;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Test2();
Test1();
}
@RequiresApi(api = Build.VERSION_CODES.N)
private void Test1() {
DecimalFormat df = new DecimalFormat("0");
Log.e(TAG, df.format(23.11));
}
/**
* 正确做法
*/
private void Test2() {
DecimalFormat df = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
df = new DecimalFormat("0");
}else{
// todo ...
}
}
}