备忘录

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系统)然后去重新启动下载即可立刻完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值