從過分析工具分析了一遍后擦酌,列出了項目中所有過期的api霸妹。
1
首先错妖,就是好多過期的getResources().getColor(R.color.color_name)规辱,可以替換的為
getColor(R.color.color_name);//需要判斷版本
getResources().getColor(R.color.color_name, getTheme());//跟上面的一個意思
ContextCompat.getColor(this, R.color.color_name);
貌似Google推薦使用ContextCompat.getColor(this, R.color.color_name)谆棺,但其實里面就是幫我們做了版本判斷
@ColorInt
public static int getColor(@NonNull Context context, @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
return context.getColor(id);
} else {
return context.getResources().getColor(id);
}
}
而且這個方法說,返回的color的就是當前主題的color罕袋,所以應(yīng)該就是已經(jīng)覆蓋了前兩種方式改淑,所以才推薦的吧。
不過這沒什么特別的炫贤,麻煩的是我的項目里有很多過期的getResources().getColor(R.color.color_name)溅固,而且每個地方上下文環(huán)境還不同,替換起來很麻煩兰珍。
最后我發(fā)現(xiàn)一個效率稍微高一些的方式侍郭,在全局查找的窗口里直接進行編輯和替換,可以減少很多操作步驟。
2
同理getResources().getDrawable(R.drawable.drawable_name)替換為
ContextCompat.getDrawable(this, R.drawable.drawable_name);
3
Webview中的shouldOverrideUrlLoading(WebView view, String url)替換為
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
4
項目中有些自定義控件使用了setDrawingCacheEnabled這條語法猛计,通過cache機制把繪制的view轉(zhuǎn)換成bitmap使用,由于性能原因這條也被廢棄了爆捞。查了一下可以用PixelCopy或者繪制Canvas兩種方式進行替換奉瘤。
PixcelCopy方式
PixelCopy.request(getWindow(),
new Rect(0, 0, view.getWidth(), view.getHeight()),b, copyResult -> {
if (copyResult == PixelCopy.SUCCESS) {
//do sth
}
}, new Handler(Looper.getMainLooper()));
Canvas方式
Bitmap bitmap = Bitmap.createBitmap(mView.getMeasuredWidth(), mView.getMeasuredHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
mIndicateView.draw(canvas);
5
setTextAppearance(Context context, @StyleRes int resId)替換為
setTextAppearance(@StyleRes int resId)//需要判斷版本最低為23
6
RecyclerView的Adapter獲取當前條目位置getAdapterPosition()替換為
getAbsoluteAdapterPosition()
7
獲取屏幕寬度的方式
int w = context.getWindowManager().getDefaultDisplay().getWidth();
替換為
Point size = new Point();
context.getWindowManager().getDefaultDisplay().getSize(size);
int w = size.x;
8
setBackgroundDrawable(Drawable background)
替換為
setBackground(Drawable)
9
setSelectedTabIndicatorHeight
可以修改為
setSelectedTabIndicator(Drawable)
如果覺得設(shè)置drawable比較麻煩,可以在布局中直接
app:tabIndicatorHeight="*dp"
可以避免在代碼中設(shè)置出現(xiàn)警告
10
自定義控件中的FILL_PARENT替換為MATCH_PARENT
11
獲取當前版本號的方法煮甥,需要判斷一下版本
pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
long longVersionCode = pi.getLongVersionCode();
Log.d(TAG, "longVersionCode:" + longVersionCode);
return (int) longVersionCode;
} else {
return pi.versionCode;
}
12
彩蛋:還有一個提示api過期的地方盗温,就是判斷網(wǎng)絡(luò)狀態(tài)的方法, 原來是通過注冊廣播獲取網(wǎng)絡(luò)連接信息成肘,現(xiàn)在可以通過ConnectivityManager以接口回調(diào)的方式獲取卖局,這兩天正在研究相關(guān)語法,打算把判斷網(wǎng)絡(luò)狀態(tài)的工具類更新一下双霍。