随着 Android 开发的越来越规范,那些“黑科技”的保活手段基本没什么用了,所以只能通过引导,让用户自己去设置相关保活的选项,就像 Rom 的白名单。只不过白名单是系统帮你设置,没有白名单就得自己去引导了。保活相关的一般包含自启动和防睡眠,当然功能在各个 Rom 的描述不尽相同,不用纠结于此。
针对各大厂商,做了一些准备工作,如下。
那是一座悲欢离合聚集的楼。
随着 Android 开发的越来越规范,那些“黑科技”的保活手段基本没什么用了,所以只能通过引导,让用户自己去设置相关保活的选项,就像 Rom 的白名单。只不过白名单是系统帮你设置,没有白名单就得自己去引导了。保活相关的一般包含自启动和防睡眠,当然功能在各个 Rom 的描述不尽相同,不用纠结于此。
针对各大厂商,做了一些准备工作,如下。
作为 Android 开发,对消息总线总不会陌生,当需要告知某些界面进行一些操作的时候,都会通过发送消息来做。早期的可以有广播,或者回调的方式,但是写起来都会比较麻烦,所以才会出现 EventBus 这种三方库,它使用起来非常方便,极大的解耦了我们的代码,所以当它一出现就受到了广大开发者的青睐。那用了这么久的 EventBus,香确实是很香,但是感觉还可以有优化的地方:
所以,在新出了 LiveData 之后,基于它的特性,是否可以进行改造呢?当然是可以的。
more >>MotionLayout 是 ConstraintLayout 2.0 版本引入进来的,目前还在测试版本中,但感觉还挺有意思的,就写一篇记录一下。
MotionLayout 类继承自 ConstraintLayout 类,允许你为各种状态之间的布局设置过渡动画。由于 MotionLayout 继承了 ConstraintLayout,因此可以直接在 XML 布局文件中使用 MotionLayout 替换 ConstraintLayout。MotionLayout 是完全声明式的,你可以完全在 XML 文件中描述一个复杂的过渡动画而无需任何代码。
MotionLayout 与 ConstraintLayout 不同的是 MotionLayout 需要链接到一个 MotionScene 文件。使用 MotionLayout 的 app:layoutDescription 属性将 MotionLayout 链接到一个 MotionScene 文件。另外,MotionLayout 所有的直接子 View 需要指定 id,不然会报错:1
All children of ConstraintLayout must have ids to use ConstraintSet.
项目中有视频上传的功能,但一直没做断点续传,针对大视频上传不友好,最近的版本需求将断点续传加上了,服务端采用的是 multipart/form-data 编码方式来实现,那么客户端也依照这个方式来做就好了。
multipart/form-data 方式用于大数据 Post 请求,用做分片正好合适。它对数据有一定的格式,参照示例:1
2
3
4
5
6
7
8
9
10
11
12
13POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
每部分都是以--boundary
开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以--boundary--
标示结束。
最近项目升大版本,targetSdkVersion 从 Android 6.0(version 21) 直接升到 Adnroid 9.0(version 28),跨度有点大,但是没有像升到 Android 6.0 那样工作量大。升完之后,在小米5、小米4C 2款测试机上 App 启动直接无响应了,在我的小米 MIX 上没问题。于是测试机调试之旅开始了。。。
在 SplashActivity onCreate 的方法里打断点进都进不去,有点懵,所以将目标定位到 Application 初始化了。看着 Application 相关初始化的代码,没发现什么大问题。打断点逐步调试,运行到某一行时直接就无响应了,后面的代码也不执行了,logcat 也看不到有用的信息,有点摸不着头脑。后面 Google 发现可以直接看到手机 ANR 的日志,路径为:/data/anr/traces.txt,于是很欢快的将日志导出到电脑:1
adb pull /data/anr/traces.txt d:/test
我有一个梦想:养一只二哈,或者柴犬、金毛也可以,哈哈。
但是狗的话,天性好动,需要每天带出去溜溜(或许是狗溜我)。我现在一个人住,普遍情况下家里是没人的,养一只狗确实没太多的时间和精力。退而求其次,养只猫或许可行?猫的话,比较爱干净,也能一整天待在家里不需要你带出去溜,只要我在家的时间能陪陪他便好了。也做了很久的思想斗争,养不好怎么办,这不是耽误猫生吗?最后还是开悟了,人生不就是这样吗?要多多体验没经历过的事情,之前没养过猫,现在养一只,也是一种经历,会养慢慢学习总能变好的。
早些日子就找过一家猫舍看过猫,也加了微信,总能在朋友圈看到各种各样的小猫咪,内心总是蠢蠢欲动。心动不如行动,就在上周日,我去猫舍买了一只美短虎斑,很调皮的一个小家伙,我给他取名「土豆」。
ConstraintLayout 出来蛮久了,但是一直没怎么用,说是可以直接进行拖拽来实现布局,但是 xml 里全是写死的 dp,不实用。然后用代码吧,属性都贼长贼多,有些难记。最近同学强力安利,说多写写就熟悉了,于是项目新的布局基本都用 ConstraintLayout 来写了,刚开始写的时候确实比较慢,很多属性不知道,有些属性有什么用也不晓得,但是用了几天后,发现真好用!人类的本质啊,真香怪!
关于 RecyclerView 的滑动方法有很多:
针对 LineaderLayoutManager 还有一个很重要的方法:scrollToPositionWithOffset,下面逐一进行说明。
more >>鉴于 H5 丰富的表现力,产品决定将项目中的某个详情页改为 H5 展示,评论、点赞仍由原生实现,于是便需要原生与 H5 交互。之前对于这块少有涉及,恰巧合作的前端同事对于这块也不太熟悉,所以耗时良久。现在功能做得差不多了,稍微记录一下。
more >>tag:
缺失模块。
1、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
2、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: true raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true