周豪侠
周豪侠
.setFocusAlpha(true)
> > .setFocusAlpha(true) > > 但是这个设置看起来在builder里面没有赋值,应该是无效的 是的,看到了,改源码吧
@bingdu0 如果系统通知关闭 就不能弹出toast了 我的做法是使用一个1.5秒后消失的Dialog来代替这个toast,当然只能在当前页面显示
1.使用合适的图片,tinyPng进行压缩,.9图,minApi > 19的时候png转化为webp 2.图片位置的合理分配。mdpi hdpi 3.一般来说使用Glide等第三方图片加载器,了解其三级缓存,图片生命周期 4.对于只有颜色不同的图片,可以只添加一张图片使用附着色改变图片颜色,如白色箭头和灰色箭头 5.兜底策略,在合适的地方启动定时内存检测,报警时清理图片内存,页面退出及时清理不需要的图片
诱导用户添加白名单 其他的基本都不现实,比如我手机上除了微信和网易云音乐加入白名单,其他(京东,淘宝,美团等)一键清理之后全部死翘翘
1.戴入耳式耳机,不放音乐,特别是你的周围全是机械键盘在比较谁的声音最响亮 2.一个问题在想了快一个小时了没出来,特别是晚上的时候,用Todo 把当前的思路写下来,问问同事或者回家睡一觉第二天基本上十多分钟就解决了或者就有思路了(多次实验,亲测好用的不行不行的) 3.Live Templates快速实现代码 4.刚来公司,午饭前后,下班前这些时间段敲敲页面,逻辑就放在中间时段写 5.写注释,补注释,我个人会在下班前一段时间把今天的代码看一遍进行补写注释 6.15年的mbp也比19年买的windows好用,真的客观事实
> @Alex-Cin @Moosphan > 大佬们,能不能看看回答的哪些地方需要完善或者有问题的呢? > > ## Android消息机制和原理 > **1.Looper.loop()和MessageQueue.next()取延时消息时,都在主线程中使用了死循环为什么不会卡死?** > > 答:因为在MessageQueue在取消息时,如果是延时消息就会计算得到该延时消息还需要延时多久nextPollTimeoutMillis。然后再继续循环的时候,发现nextPollTimeoutMillis不等于0,就会执行nativePollOnce阻塞线程nextPollTimeoutMillis毫秒,而阻塞了之后被唤醒的时机就是阻塞的时间到了或者又有新的消息添加进来执行enqueueMessage方法调用nativeWake唤醒阻塞线程,再继续执行获取消息的代码,如果有消息就返回,如果还是需要延时就继续和上边一样阻塞。而Android所有的事件要在主线程中改变的都会通过主线程的Handler发送消息处理,所以就完全保证了不会卡死。 > > 其中nativePollOnce的的位置也有考究,刚好在synchronized的外边,所以在阻塞的时候也能保证添加消息是可以执行的,而取消息时添加消息就需要等待。 > > nativePollOnce和nativeWake都是底层方法,调用链: > > * nativePollOnce --> android_os_MessageQueue.pollOnce --> Looper.pollOnce --> Looper.pollInner...
1.一般来说主要针对屏幕适配,最小宽度适配和今日头条density适配 2.权限适配,安卓6.0的运行时权限,这里有坑,6.0以前,Vivo有i管家进行权限管理,魅族自带有权限管理,还有其他第三方软件进行权限限制,导致权限不可用 3.异形屏幕适配,一般来说都是刘海,水滴,挖孔部分不进行使用或者就直接不管不显示缺失部分,可以满足大部分需求,小部分需求需要使用异形部分的需要按手机型号进行特定适配,官网都有适配方法 4.安卓系统适配,及时关注新系统新特性,使情况修改targetSdk 5.语言,Left Right和Start End,这些适配基本不需要太大关注 6.“和ios一样”,口才或者脑细胞适配,能说服就下班,不能就加班
RecyclerView优化 一句话思路 空间换取时间 使用内存空间来换取数据转化的时间 1.在Adapter中最好不要进行任何的逻辑操作,比如日期转换,字符串切割等等,可以在model内部自行添加一个参数使用 by lazy 来存储数据转换后的结果,这样数据逻辑操作就只执行一次,而不会随着数据回收重复计算 2.新增删除数据不刷线全部,而是刷新局部 3.布局优化,尽量少的布局嵌套,尽量少的控件 4.对于一些RecyclerView嵌套RecyclerView的布局可以进行多布局展示,而不是使用嵌套 5.资源文件的读取,初始化的时候使用 by lazy 生成 6.如果RecyclerView条目高度固定,使用setHasFixedSize(true),避免多次测量条目高度 7.对于RecyclerView,如果不需要动画,就把条目显示动画取消setSupportsChangeAnimations(false) 8.在RecyclerView添加滑动监听,一些图片加载可以在RecyclerView快速滑动的时候不进行加载图片 9.对于一个页面中的多个RecyclerView,如果使用同一个Adapter,可以使用setRecycledViewPool(pool),共用回收池, 避免来每一个RecyclerView都创建一个回收池,特别是RecyclerView嵌套RecyclerView时候, 内部的RecyclerView必定使用的都是同一个Adapter,这个时候就很有必要使用回收池了 10.视情况使用setItemViewCacheSize(size)来加大RecyclerView缓存数目,用空间换取时间提高流畅度 11.对于条目点击时间不要在复用部分进行setOnClickListener,这样会重复设置点击监听,而是应该创建一个listener对象, 传入控件的id,和当前的条目position,通过id和position判断处理点击监听 12.可以进行预加载,重写LayoutManager的getExtraLayoutSpace()方法,可以返回屏幕高度,预先加载一屏幕高度的数据, 视情况,例如:一个item就占据一个页面,RecyclerView滑动到第二张,此时第一张可见,RecyclerView无法找到可复用 的View,此时会重新new一个出来,滑动卡顿,第三张及以后可以找到复用的View,滑动流畅
同样遇到这个问题,解决了么 @QueryGad @jeasonlzy