Android相关
1.获取系统或其他包的资源文件ID
Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android");
2.如果想一次启动多个Activity,即一次启动一个ActivityTask。使用TaskStackBuilder即可。
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(parentIntent);
stackBuilder.addNextIntent(intent);
stackBuilder.startActivities();
// stackBuilder.getPendingIntent()
3 canvas.drawText需要居中绘制时。由于drawText是baseline对齐,所以需要增加一定 Y 才能使文字在想要的中点。增加的高度算法如下
private int getTextCenterOffset(Paint.FontMetricsInt metrics) {
return (metrics.descent - metrics.ascent) / 2 - (metrics.descent - metrics.leading);
}
4如果修改了View的高度或者某些影响大小的属性,一定使用该View调用RequestLayout。不能使用其父ViewGroup的,比如当需要修改多个子View的高度,直接调用父ViewGroup的requestLayout是行不通的。必须挨个调用子View的RequestLayout,因为在调用时,该View会记录一个标记:
public void requestLayout() {
...
mPrivateFlags |= PFLAG_FORCE_LAYOUT;
...
}
该View 在measure时,会根据这个标记来判断是否调用自己的onMeasure,否则会直接使用缓存数据:
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
...
if ((mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT ||
widthMeasureSpec != mOldWidthMeasureSpec ||
heightMeasureSpec != mOldHeightMeasureSpec) {
...
int cacheIndex = (mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT ? -1 :
mMeasureCache.indexOfKey(key);
if (cacheIndex < 0 || sIgnoreMeasureCache) {
// measure ourselves, this should set the measured dimension flag back
onMeasure(widthMeasureSpec, heightMeasureSpec);
mPrivateFlags3 &= ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;
} else {
long value = mMeasureCache.valueAt(cacheIndex);
// Casting a long to int drops the high 32 bits, no mask needed
setMeasuredDimensionRaw((int) (value >> 32), (int) value);
mPrivateFlags3 |= PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;
}
...
}
5. ViewPager可以使用Adapte中的instantiateItem与destroyItem方法来实现重用机制,但是由于这两个方法的调用顺序是随着滑动的方式不同可变的。逆向滑动时instantiateItem会先于destroyItem方法调用,导致无法立刻拿到destroyItem废弃的View。导致缓存里面可能会多一个View占用内存。(暂未解决)
6.记录几个不长用的Activity 配置属性
(1) excludeFromRecents:指是否在历史列表中展示该Activity true即不展示
(2) finishOnTaskLaunch:是否在重新启动该Activity时,先关闭之前的 true为关闭
(3) taskAffinity:记录该Activity启动时使用的Task
/*******************************************************/
其他
1. Bilibili 右侧弹幕池在Ubuntu Chrome上乱码问题,解决办法,打开Bilibili设置页,字体下拉框中选择Droid Sans Fallback字体即可解决。
2. 使用android studio时,经常引入一个project可能需要下载相应版本的gradle文件。国内的网络会有经常下不下来的情况。所以一般只要先启动下载后,然后手动中断下载。然后自己将用其他方式下下来的gradle的zip包放到默认下载目录上(一般为长传英文乱码文件夹,在用户目录如:/home/liguanyi/.gradle/wrapper/dists/gradle-2.4-all/6r4uqcc6ovnq6ac6s0txzcpc0 ubuntu系统)然后去重新启动下载即可立刻完成。