leakcanary

Bate冲刺——问题总结博客(事后诸葛亮和组员交换事宜)

独自空忆成欢 提交于 2020-07-28 12:17:24
这个作业属于哪个课程 < 2020 春 W 班 (福州大学) > 这个作业要求在哪里 < 作业要求 > 团队名称 <旗山的骄傲> 这个作业的目标 <Beta 冲刺> 作业正文 < 作业正文 > 其他参考文献 <《构建之法》> part.01 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决问题 服务于高校师生,集任务发布、物品租赁、失物招领及其他附加功能的校园综合平台。解决了高校日常生活中需要解决难题时需要发布任务的情景;解决了对某类物品急用时物品租赁的场景;解决了丢失/捡到失物时失物招领的情景;解决了找人/找群/找历年卷时使用附加功能时的场景。 定义是否很清楚 定义较为清楚 是否对典型用户和典型场景有清晰的描述 有针对四个模块对典型用户和典型场景有清晰的描述(见下) 发布任务 典型用户:刘志勇 用户需求:代领快递 场景描述: 雨天,一位名为刘志勇的大学生收到了一条快递信息,要去5区在19:00前领快递,但是他不想出门,又不知道专门的代领快递的组织,这时他点开了手机上的“校园芥子空间”app,点击“发布任务”,发起了高额悬赏——5元,不到五分钟就有人接了单,在一小时后给他送快递上门,伴随着“尊敬的刘先生,你的快递到了”的话语以及支付宝到账的提示音,任务结束。 物品租赁 典型用户:刘志勇,黄晓东 用户需求:出租衣服,租赁衣服

Bate冲刺——问题总结博客(事后诸葛亮和组员交换事宜)

懵懂的女人 提交于 2020-07-28 08:58:42
这个作业属于哪个课程 < 2020 春 W 班 (福州大学) > 这个作业要求在哪里 < 作业要求 > 团队名称 <旗山的骄傲> 这个作业的目标 <Beta 冲刺> 作业正文 < 作业正文 > 其他参考文献 <《构建之法》> part.01 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决问题 服务于高校师生,集任务发布、物品租赁、失物招领及其他附加功能的校园综合平台。解决了高校日常生活中需要解决难题时需要发布任务的情景;解决了对某类物品急用时物品租赁的场景;解决了丢失/捡到失物时失物招领的情景;解决了找人/找群/找历年卷时使用附加功能时的场景。 定义是否很清楚 定义较为清楚 是否对典型用户和典型场景有清晰的描述 有针对四个模块对典型用户和典型场景有清晰的描述(见下) 发布任务 典型用户:刘志勇 用户需求:代领快递 场景描述: 雨天,一位名为刘志勇的大学生收到了一条快递信息,要去5区在19:00前领快递,但是他不想出门,又不知道专门的代领快递的组织,这时他点开了手机上的“校园芥子空间”app,点击“发布任务”,发起了高额悬赏——5元,不到五分钟就有人接了单,在一小时后给他送快递上门,伴随着“尊敬的刘先生,你的快递到了”的话语以及支付宝到账的提示音,任务结束。 物品租赁 典型用户:刘志勇,黄晓东 用户需求:出租衣服,租赁衣服

Could Navigation Arch Component create a false positive memory leak?

£可爱£侵袭症+ 提交于 2020-05-10 07:28:06
问题 I have a basic knowledge of memory leaks and what can cause them. That's why I don't understand if I have a problem in my code or is it a false positive. I don't know which part of the code I should share since the project is not small. But just let me know in the comments and I will add required code. I use navigation arch component and follow MVVM pattern. I added LeakCanary library later in the development of project and it immediately started to give me warnings about retained instances

Leak canary, Recyclerview leaking mAdapter

試著忘記壹切 提交于 2020-05-09 18:16:27
问题 I decided it was high time I learned how to use Leak Canary to detect Leaks within my apps, and as I always do, I tried to implement it in my project to really understand how to use the tool. Implementing it was easy enough, the difficult part was reading what the tool is throwing back at me. I have a scrollview that seems to accumulate memory in the memory manager as I scroll up and down (even though It doesnt load any new data) so I thought that was a good candidate object to track leaks on

Android 常用开源框架源码解析 系列 (六)LeakCanary 性能优化框架

落花浮王杯 提交于 2020-05-08 21:10:06
一、前言 性能优化 是衡量 我们app质量的一个很大标准 几大影响性能的问题: UI卡顿 ——主线程耗时操作过多 ANR——主线程耗时操作过多 内存泄漏 OOM 内存溢出——图片处理 启动速度 内存泄漏 特点: 不易察觉,不易发现 长时间不断累积会导致OOM内存溢出 内存泄漏出现的原因 Java虚拟机 会自动提供一套GC垃圾回收机制。在其内部会自动进行便利无用引用对象而进行内存的清理工作。 其根本原因是:较长生命周期的对象持有了较短生命周期的引用导致较短生命周期对象无法被垃圾回收器回收。 GcRoots 垃圾收集器 (Garbage Collector) 的对象 可达性算法-分析对象是否存活 从GcRoots结点作为起点,向下依次搜索,搜索走过的路径被称为引用链。当一个对象达到没有任何与GcRoots 引用链相连的时候,就说明该对象是不可用的,该对象就是Gc可回收对象。 Gc回收的对象: 没有被GcRoots 引用的对象 Java中的4种引用 强引用 如果一个对象是通过一串强引用链相连的 它就不能被回收。JVM即时报错OOM也不会回收强引用对象 软引用 -soft 优先级低于强引用,在内存足够的情况下,他和强引用的效果一致。但是如果出现内存不足的情况,Gc垃圾回收就会回收掉软引用对象。 弱引用 -weak 不会强制对象保存到内存当中,优先级低于软引用。Gc回收器必回收对象之一。

android面试题(5.4)

我是研究僧i 提交于 2020-05-05 17:48:08
2020年Android面试题含答案 Android 2020年经典面试题 链接到 1.跨进程通信的几种方式 Intent,比如拨打电话 ContentProvider数据库存储数据 Broadcast广播通信 AIDL通信,通过接口共享数据 2.wait和 sleep 的区别 wait是Object的方法,wait是对象锁,锁定方法不让继续执行,当执行notify方法后就会继续执行,sleep 是Thread的方法,sleep 是使线程睡眠,让出cpu,结束后自动继续执行 3.String,StringBuffer,StringBuilder的区别 String不可改变对象,一旦创建就不能修改 String str="aaa"; str="bbb"; 以上代码虽然改变了str,但是执行过程是回收str,把值赋给一个新的str StringBuffer创建之后,可以去修改 StringBuilder也可修改,执行效率高于StringBuffer,不安全 当字符赋值少使用String 字符赋值频繁使用StringBuilder 当多个线程同步操作数据,使用StringBuffer 4.View和SurfaceView的区别 View基于主线程刷新UI,SurfaceView子线程又可以刷新UI 5.View的绘制原理 View为所有图形控件的基类,View的绘制由3个函数完成

Android 内存泄漏总结(转)

雨燕双飞 提交于 2020-05-02 03:21:28
Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量。 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工具来分析应用内存泄漏,最后再做总结。 篇幅有些长,大家可以分几节来看! Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。 静态存储区(方法区):主要存放静态数据、全局 static 数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。 栈区 :当方法被执行时,方法体内的局部变量都在栈上创建,并在方法执行结束时这些局部变量所持有的内存将会自动被释放。因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区 : 又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存

Android性能优化问题总结

有些话、适合烂在心里 提交于 2020-05-01 04:40:03
  性能优化这块,分为UI性能优化、内存优化、数据库优化、网络优化、耗电优化等等。可以从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述。举个简单例子——UI优化,可以从 UI出现什么问题(卡顿不流畅),怎么查找问题(手机开发者权限>GPU过度绘制 发现层级问题,TraceView CPU使用情况分析),怎么解决问题(降低层级、自定义View绘图出现问题等),解决问题后性能再次对比。 一、UI优化 a.合理选择RelativeLayout、LinearLayout、FrameLayout,RelativeLayout会让子View调用2次onMeasure,而且布局相对复杂时,onMeasure相对比较复杂,效率比较低,LinearLayout在weight>0时也会让子View调用2次onMeasure。LinearLayout weight测量分配原则。 b.使用标签 c.减少布局层级,可以通过手机开发者选项>GPU过渡绘制查看,一般层级控制在4层以内,超过5层时需要考虑是否重新排版布局。 d.自定义View时,重写onDraw()方法,不要在该方法中新建对象,否则容易触发GC,导致性能下降 e.使用ListView时需要复用contentView,并使用Holder减少findViewById加载View。 f.去除不必要背景,getWindow()

快速上手系列--Android应用开发模板

筅森魡賤 提交于 2020-04-05 22:01:14
Android应用开发模板 Android空壳模板工程,快速搭建(集成了XUI、XUtil、XAOP、XPage、XUpdate、XHttp2、友盟统计和walle多渠道打包) 效果预览 项目地址 https://github.com/xuexiangjys/TemplateAppProject 项目集成介绍 本项目是项目androidx项目。精选了X系列最实用的几个库,可大大提高开发的效率。 XUI 一个简洁而优雅的Android原生UI框架,解放你的双手! XUtil 一个方便实用的Android工具类库! XAOP 一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。 XPage 一个非常方便的fragment页面框架。 XUpdate 一个轻量级、高可用性的Android版本更新框架。 XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装。 除此之外,还集成了其他优秀的第三方库: AndroidAutoSize 优秀的屏幕适配方案 butterknife 控件依赖注入框架 leakcanary 内存泄漏检测 视频教程 视频源链接地址: https://www.bilibili.com/video/av92348545 使用方式 1.克隆项目 git clone https://github

Android深度性能优化--内存优化(一篇就够)

混江龙づ霸主 提交于 2020-03-06 10:15:19
本文整理自网络课程 一、背景 在内存管理上,JVM拥有垃圾内存回收的机制,自身会在虚拟机层面自动分配和释放内存,因此不需要像使用C/C++一样在代码中分配和释放某一块内存。Android系统的内存管理类似于JVM,通过new关键字来为对象分配内存,内存的释放由GC来回收。并且Android系统在内存管理上有一个Generational Heap Memory模型,当内存达到某一个阈值时,系统会根据不同的规则自动释放可以释放的内存。即便有了内存管理机制,但是,如果不合理地使用内存,也会造成一系列的性能问题,比如内存泄漏、内存抖动、短时间内分配大量的内存对象等等。 二、优化工具 2.1 Memory Profiler Memory profiler是Android Studio自带的一个内存检测工具,通过实时图表的方式展示内存信息,具有可以识别内存泄露,内存抖动等现象,并可以将捕获到的内存信息进行堆转储、强制GC以及跟踪内存分配的能力。 Android Studio打开Profiler工具 观察Memory曲线,比较平缓即为内存分配正常,如果出现大的波动有可能发生了内存泄露。 GC:可手动触发GC Dump:Dump出当前Java Heap信息 Record:记录一段时间内的内存信息 点击Dump后 可查看当前内存分配对象 Allocations:分配对象个数 Native Size