美文网首页
上班第二周

上班第二周

作者: 寒冬_腊月 | 来源:发表于2020-05-16 23:19 被阅读0次

任务

  1. 升级调试热修复框架
  2. 还是解决项目的ANR问题

热修复框架

目前公司项目有用到两套热修复框架:阿里的Sophix和腾讯的TinkerPatch
tinkerPatch是基于tinker开源的,提供了下发和管理补丁包

考虑到tinkerpatch免费版本不支持灰度,而且tinkerpatch配制要繁琐一些,所以直接使用sophix

继续解决ANR问题

测试小伙伴反馈,当项目群成员达到10000个时候,先进显示群成员列表,然后再返回的时候就会出现ANR,解决思路:

第一步
使用adb获取anr报告

$ adb bugreport .

打开anr日记,搜索关键字 "main", 查到主线程的信息,这里我没有发现有用的信息

第二步
使用Android Studio cpu profile, 分析主线程上方法的调用情况,看是哪个方法执行耗时操作了

分析得到结果:当返回的时候在Activity的onResume方法中执行了从数据库查到数据的操作,后面分析数据库相关操作问题,原来在群成员列表界面直接了很耗时的数据库操作,虽然是在子线程里面跑的,但是打印了一下方法执行的时间差不多要5s,所有当主线程也要访问数据库的时候就造成ANR了

我们项目是使用ormlite来操作数据库,而且ormlite获取的数据库对象的时候会加一个同步锁,为了解决多线程访问的问题

解决
一开始在onResume方法中执行的数据库访问操作也放在子线程中,发现子线程执行完成后要回调通知主线程,这样代码逻辑改动很大,就放弃这个方案

后面想在群成员列表界面子线程执行耗时操作的时候加个判断,如果Activity已经退出的时候就退出循环,不向下执行,这就就可以数据库对象一直被子线程占用引用的这个ANR的问题

如果要完美解决的话,还是要把所有的数据库操作都放在子线程里面,而且当Acitivty退出的时候,Activity所使用的子线程来操作数据库的方法也要退出一下

ps: 这个上线了一个新的版本,虽然改了一些ANR的问题,发出是没有再报出来了,但是还是有一些ANR的问题报出来,后面继续努力了,争取把所有的ANR问题都解决掉

遇到的问题

  1. Fragment执行runonUiThread遇到下面问题
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.runOnUiThread(java.lang.Runnable)' on a null object reference

解决:

if (getActivity() == null)  
    return;  

getActivity().runOnUiThread(new Runnable() {  
    @Override  
    public void run() {  
        _updateBanners(bannerItems, bannerImages);  
    }  
});  
  1. gradlew 命令不可用
    在Android studio中的Terminal中输入./gradlew commond
-bash: ./gradlew: Permission denied

解决:

chmod +x gradlew
  1. sophix配制的问题
"org.jf.util.ExceptionWithContext: Exception occurred while writing code_item for method Activity路径;->init()V"
"\tat org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:825)"
"\tat org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:268)"
"\tat org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:246)"
"\tat org.jf.smali.Smali.assemble(Smali.java:130)"
"\tat com.taobao.sophix.impl.PatchCommand.start(PatchCommand.java:373)"
"\tat com.taobao.sophix.Main.main(Main.java:34)"
"Caused by: org.jf.util.ExceptionWithContext: Error while writing instruction at code offset 0x12"
"\tat org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1098)"
"\tat org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:821)"
"\t... 5 more"
"Caused by: org.jf.util.ExceptionWithContext: Unsigned short value out of range: 143796"
"\tat org.jf.dexlib2.writer.DexDataWriter.writeUshort(DexDataWriter.java:116)"
"\tat org.jf.dexlib2.writer.InstructionWriter.write(InstructionWriter.java:236)"
"\tat org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1025)"
"\t... 6 more"

暂时还没有想到怎么去解决

  1. Android Studio 打包报错
> Task :compileKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileKotlin'.
> Kotlin could not find the required JDK tools in the Java installation '/usr/lib/jvm/java-8-openjdk-amd64/jre' used by Gradle. Make sure Gradle is running on a JDK, not JRE.

解决:重新安装openjdk

sudo apt-get install openjdk-8-jdk

总结

  1. 项目用到的即时通讯是通过WebSocket协议建立长连接来实现
  2. 事务表示在数据库管理系统(或类似的系统)中对数据库执行的工作单元,
    事务有几个特性, 简写就是ACID,即Atomic,Consistency,Isolation,Durability 其中最重要的就是原子性

数据库环境中的事务有两个主要目的:

  • 提供可靠的工作单元,允许从故障中进行正确的恢复,并在系统故障、执行停止(全部或部分停止)和许多操作时保持数据库一致
  • 在并发访问数据库的程序之间提供隔离
  1. ormlite框架
    Android中有很多操作SQLite数据库的框架,现在最常见、最常用的是ORMLite和GreenDAO。ORMLite相比与GreenDAO来说是一个轻量级的框架

  2. Vollery网络请求
    Google官方出的网络请求框架,包小(100多k),非常适合进行数据量不大,但通信频繁的网络操作,可以取消请求,不适合下载大量内容的操作,使用DownloadManager替换,后台要花时候研究一下这里面具体是怎么实现的

参考

volley

相关文章

  • 上班第二周

    任务 升级调试热修复框架 还是解决项目的ANR问题 热修复框架 目前公司项目有用到两套热修复框架:阿里的Sophi...

  • 上班第二周了

    今天都已经上班第二周了呢。 好久没有记录了。 一切照旧, 突然发现和杨胖一周见一次,还更能产生美,哈哈 偶尔还是会...

  • 上班第二周反思

    本周已经是上班的第2周了,例行周总结一下。由于包含今年的五一假期4天,本周实际工作日3天。 生活作息依旧沉浸在以往...

  • 上班第二周——关于检讨

    真是该强烈的谴责自己!上班都多少天了啊?一天不如一天,老是出错,老是不知道该干啥,明明那么多活,不知道去做,那么多...

  • 在家上班的第二周

    非常时期,疫情防控需要尽量减少人员流动;另一方面,很多单位又需要开展工作。为兼顾两方面需求,“在家办公”成为了全民...

  • 2021-01-18-很俗气,但我还是要感慨,时间真的过得好快啊

    每日一感叹,时间真的过得好快啊。 起床,上班,午饭,上班,晚饭,运动,洗澡,睡觉,第二天。 周末,第二周。 似乎工...

  • 上班第二周第二天

    今天继续学习产品知识,虽然学习的程度连皮毛也算不上,但还是觉得该学习的东西太多太多了,恨不得把时间掰成两半用。 看...

  • 上班后第二周的小结

    过去的一周是上班后的第二个星期,其实对于一个刚休完产假的人来说,我觉得真的比上一次要好,好太多,没什么出现孕傻的情...

  • 没有翅膀的天使2

    小艾一片失落。 第二天,周生没有来上班,小艾很担心,下班自己熬了点粥,来到周生的家。这是第二次。周...

  • 27. 中考奋斗史(一)

    回顾开学前两周的工作 本学期上班第二周,我已经调整好我的作息,适应了披星戴月 、朝七晚六的上班族的生活,每天...

网友评论

      本文标题:上班第二周

      本文链接:https://www.haomeiwen.com/subject/nqbdohtx.html