android
呦呦乎
想养只猫
展开
-
Android Sqlite 代码实现 多表联合查询
最近开发ServerMonitor解决的一个issue,关于数据库的的升级,需要log表内添加一个is_scuuess字段并且对原数据库中每条日志的该记录赋值,判断成功的逻辑是根据不同协议的返回状态码及请求时间进行判断,因为日志表内只有一个site_id字段,具体日志记录的协议类型字段在site表内,于是决定采用多表联合查询的方法,通过site_id,将log表的日志记录与site表内的port_原创 2018-02-02 20:54:49 · 5186 阅读 · 1 评论 -
Android UI性能优化之过度绘制
最近入坑性能优化,导师安排我做公司项目的性能优化,so,搞了两个星期之后有了点自己的体会,这是第一篇,关于过度绘制这一块:准备工作:手机——>开发者选项——>调试GPU过度绘制 adb命令——>开启『调试 GPU 过度绘制』:adb shell setprop debug.hwui.overdraw show ...原创 2019-03-10 13:30:59 · 377 阅读 · 0 评论 -
android 8.0 新特性:通知渠道
由于Google的限制,要求在2018年10月之前 targetSdkVersion 必须在26以上,更改过之后发现在androd 8手机上不再推送通知,查看android 8.0官方文档发现,添加了通知渠道新特性,并要求targetSdkVersion 26以上的android 8手机必须实现通知渠道 通知渠道可以用户自定义,并在用户手机系统设置里面修改,通知渠道的引入可以让用户对通知的优...原创 2018-07-15 11:19:13 · 1594 阅读 · 0 评论 -
Resolved versions for app (26.1.0) and test app (27.1.1) differ.
Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27...原创 2018-07-13 15:51:34 · 183 阅读 · 0 评论 -
迁移应用到Android O ——广播限制
首先记住两点:显式广播和隐式广播属于发送广播行为;静态注册和动态注册属于注册广播接收器行为 由于开发者在开发过程中,为了一些功能的需要,经常在清单上静态注册广播接收器,由于静态注册的recevicer,即使应用不启动,仍然能够接收到广播,假设一个情景,你的手机上有10个app,每一个app开发者都为其静态注册了android.net.conn.CONNECTIVITY_CHANGE ...原创 2018-07-24 11:30:34 · 397 阅读 · 0 评论 -
android智能手机虚拟键与activity的关系
按 Home 键 onPause onStop 点击菜单键 能够看到 应用视图,此时应用activity处于 onStop 状态, 点击应用视图,回调 onRestart onStart onResume 按返回键 该行为事件默认为 onPause onStop onDestory 点击菜单键 ...原创 2018-07-24 11:13:59 · 281 阅读 · 0 评论 -
android 针对数据库版本升级的单元测试
对于已经发布的app,进行数据库版本升级时,必须要考虑用户原有的旧数据是否能够兼容新版本数据库,最基础的做法就是将备份数据导入app新版本中,进行全面测试,判断应用程序是否出错,但这种做法很难做到万无一失,而且耗费成本非常高,而还有一种简单有效的方法就是写单元测试,目前,升级数据库的时候,我的基本思路是,旧数据库文件copy到当前app应用数据库文件中,然后open...原创 2018-05-23 17:09:44 · 361 阅读 · 0 评论 -
解决 duplicate entry: com/android/volley/AuthFailureError.class 重复包导入
该问题是由于重复导入包导致,一般是由于app module 与 library module中导入相同的jar包导致,针对标题中的问题可通过在app 的 build.gradle中android{ //other configurations { all*.exclude group: 'com.android.volley' }}如果是 duplicate entry...原创 2018-05-25 09:42:08 · 2209 阅读 · 0 评论 -
RecyclerView之notifyDataSetChanged()
/** * Notify any registered observers that the data set has changed.//通知所有的注册观察者数据已经发生改变 * * <p>There are two different classes of data change events, item changes and structural * changes....原创 2018-05-06 17:03:53 · 854 阅读 · 0 评论 -
androis Studio cache properties 系统找不到指定的文件
最近android studio Build时遇到一个问题,一直报错 Gradle sync failed: C:\Users\Username\.gradle\caches\2.14.1\scripts-remapped\build_22b2w9hvazb1r1ed8tae6hsoi\6orjsa5x9d3biz51duhla23nj\cp_proj57408229\cache.properti...原创 2018-04-24 10:10:14 · 506 阅读 · 0 评论 -
.gitlab-ci.yml 文件中添加单元测试
在项目根目录下的 .gitlab-ci.yml文件中添加stages: - build - test/*其他配置*/unitTest: //自定义名字 stage: test script: //脚本 执行 - ./gradlew test //执行语句...原创 2018-04-13 16:41:09 · 3023 阅读 · 1 评论 -
在Retrofit框架中创建日志拦截器Intercept
最近做项目中需要查看服务器返回的原始json格式数据,由于项目基于Retrofit/Rxjava网络协议框架,其返回值为Bean类型格式,于是便想写一个Intercept,对服务器返回的数据拦截并进行log显示,下面是自定义拦截器类public class TestInterceptor implements Interceptor { @Override public Respo...原创 2018-03-17 20:59:52 · 751 阅读 · 0 评论 -
Response中body()与peekBody()的区别
body() 和 peekBody() 方法返回的都是一个 ResponseBody 对象,不同的是 body() 返回的当前 response 的 body,查看源码 /** * Returns a non-null value if this response was passed to {@link Callback#onResponse} or returned * from...原创 2018-03-17 20:31:27 · 2992 阅读 · 0 评论 -
调用finish方法的activity后续执行过程
最近开发ServerMonitor时,遇到一个有趣的情况,在一个方法体内调用了finish方法之后,后续代码依旧得到执行原创 2018-02-10 13:14:51 · 1597 阅读 · 1 评论