Android性能优化:电量优化
一. 前言 耗电情况,例如:打开屏幕,所有要使用CPU/GPU工作的动作都会唤醒屏幕,都会消耗电量。这和应用程序唤醒设备还不一样。比如使用叫醒闹钟(wake clock)、AlarmManager、JobSchedulerAPI。
二. 电量消耗情景1. 移动网络请求当设备通过无线网发送数据的时候,为了使用硬件,这里会出现一个唤醒耗电高峰。接下来还 有一个高数值,这是发送数据包消耗的电量,然后接受数据包也会消耗大量电量 也看到一个峰值。
2. WakeLockAndroid 系统本身为了优化电量的使用,会在没有操作时进入休眠状态,来节省电量。当然,为了便于开发(很多应用不可避免的希望在灭屏后还能运行一些事儿,或是要保持屏幕一直亮着–比如播放视频),Android 提供了一个 PowerManager.WakeLock 的东西。
我们可以用 WakeLock 来保持 CPU 运行,或是防止屏幕变暗/关闭,让手机可以在用户不操作时依然可以做一些事儿。然而,获取 WakeLock 很容易,释放不好就会成为难题,消耗电量。例如获取了一个 WakeLock 来保持 CPU 运转, ...
Android性能优化:布局优化
一. 过度绘制1. 什么是过度绘制一个像素绘制超过一次。
2. 追踪过度绘制Android手机的开发者模式有一个Show GPU Overdraw工具。
蓝色:1×过度绘制。
绿色:2×过度绘制。
浅红色:3×过度绘制。
深红色:4×过度绘制。
3. 优化过度绘制降低View层级:
LinearLayout VS RelativeLayout
merge
不必要的背景:
去掉window的背景
去掉布局中不必要的背景。
ClipRect & QuickReject
ViewStub
.9图用作背景
二.UI卡顿1.帧率Frame Rate,单位fps,是指GPU生成帧的速率,越高越好。
2. 屏幕刷新率Refresh Rate,单位HZ,是指设备刷新屏幕的频率,对于特定设备来说是个常量,如60HZ。
3. VSync的作用① 没有引入VSync时,屏幕显示图像的工作流程。
如上图,CPU/GPU 向 Buffer 中生成图像,屏幕从 Buffer 中取图像、刷新后显示。这是一个典型的生产者——消费者模型。理想的情况是帧率和刷新频率相等,每绘制一帧,屏幕显示一帧。 ...
面试-字节跳动Android实习生
简单的介绍本人末流211计算机专业大三本科生,于2020年6月20日在字节跳动的官网上投递了广州的Android开发实习生。
字节跳动的面试官真的很nice,特别有耐心。
一面(6月24日 104min)
自我介绍。
线程和进程的区别。
线程安全。我回答了sychronized关键字(关于锁,wait,notify参考我的一篇博客—Java 多线程)。面试官追问是否了解volite关键字,我忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,我回答了解但是没用过。
http是用什么实现的。
TCP和UDP的区别。
TCP为什么是可靠的。注意拥塞机制涉及的算法(慢开始,拥塞避难,快重传,快恢复)。
Get请求和Post请求的区别。注意Get请求比Post请求效率高,Post请求需要服务器返回100再发送数据处理,Get请求直接是通过URL。面试官追问是否知道其他请求方式,Put,Delete,Head。
项目中询问一个 A Activity 跳到一个 B Activity中,生命周期的走动,点击Back返回呢。如果一个 A Activity是透明的呢?如果 B Ac ...
Android性能优化:内存优化
一. 垃圾回收机制1. 什么是垃圾回收机制自动内存管理和回收机制。垃圾回收器负责回收程序中已经不使用,但是仍然被各种对象占用的内存。
优点:将程序员从繁重,危险的内存管理工作中解放出来。
缺点:可能会占用大量资源。
2. Android中的垃圾回收机制
Young Generation
大多数新建的对象都位于Eden区。
当EDen区被对象填满时,就会执行Minor GC。并把所有存活下来的对象转移到一个survivor区。
Survivor Space:S0,S1有两个,存放每次垃圾回收后存活的对象。
MInor GC同样会检查survivor区中存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。
Old Generation
存放长期存活的对象和经过多次MInor GC后依然存活下来的对象。
满了进行Major GC。
Permanent Generation
存放方法区,方法区中有要加载的类信息,静态变量,final类型的常量,属性和方法信息。
3. 垃圾回收机制 & FPS
Android系统每隔16 ...
Android项目:驾考宝典
一. 运行效果以及源码1.gif图效果
2.源码地址DriveQuestion
二.主要的思路使用OKHttp+Gson将服务器端的数据显示到ViewPager上。
数据来自:阿凡达数据-驾照题库
自定义View-XLLetterView
一. 前言常用的应用场景:城市搜索的侧边栏,通讯录的侧边栏
Github地址:XLLetterView
二. 自定义View1. 自定义用到的属性1234567891011121314151617181920212223242526//绘制文本的画笔private Paint paint;//字母正常状态画笔的颜色private int text_color = Color.WHITE;//字母选中状态画笔颜色private int select_text_color = Color.MAGENTA;//画笔的粗细private int text_size = 60;//字母与左右的间距private int space_hor = 10;//字母之间或者字母和上下的间距private int space_ver = 10;//字母的最大高度private int max_letter_height = 0;//监听者private LetterChangeListener listener;//上一次选择字母private String lastLetter;//当前选择的字母pr ...
Android项目:iMarTen
一. 运行效果以及源码1.gif图效果
2.源码地址https://github.com/xiaoshitounen/Underess
二.主要的思路① XLBottomView+ViewPager+Fragment达成:漫威数据和网球数据的分离。
② TabLayout+ViewPager+Fragment+RecyclerView达成:网格布局和瀑布布局显示的分离。
Android项目:绘画
一. 运行效果以及源码1.gif图效果
2.源码地址MyDrawingBoard
二.主要的思路主要就是结合了:文件操作外部存储,数据库SQLite,ListView以及的项目画板的内容。