Android Go项目 来电铃声与UI不同步问题
问题:Android R Go项目,来电时,来电铃声响起后,来电UI需要7-8秒才显示,甚至来电结束后都无法显示
根因:来电铃声在“Telecom”中,来电界面是在incallui,所以来电铃声会比界面快。这个问题在中高性能手机中也存在,但时间差很小,用户无法感知。在Android Go中,时间差比较大。根本原因在于Android的默认设计和平台的性能。
方案1:在MTK的FAQ中提供过一个参考方案(问题不同,方案可参考),Telecom不直接播放铃声,提供接口出来,由UI这边调用播放铃声。这个方案有个前提,需要修改Dialer端代码。
参考:[FAQ14322] 【Phone Call】关于来电响铃与UI同步的Workround方法
由于我们使用GoogleDialer,此方案不可行。
方案2:在使用GoogleDialer的情况下,UI是由Dialer发起的,没有源码,无法做到在发起UI的时候调用铃声,因此只能提供其他方式。
a)铃声延时播放,此问题仅能解决来电铃声与UI有明显规律的情况,即差异在不同场景下比较小,例如2秒,则可以考虑铃声延时1.5s播放。在CallAudioManager.java.中延时播放铃声。此修改会导致概率性UI先显示,来电铃声后播放,差异不大的情况下,可以接受
b)设置apk为odex status为speed mode,优先效果不明显
c)在来电的时候进行fastkill,释放内存出来。优化效果明显。(参考camera的fastkill修改)
在来电的时候,会创建dialer进程,在创建进程时,调用fastkill,最后会调用到lmkd中进程快速杀进程。fastkill的规则:一个是设置的fast_kill_mem,为设置的规定参数。例如100MB。
另外一个规则是杀进程的oom_adj,为设置的规定参数,例如400.
static int find_and_kill_multi_processes(int min_score_adj, int kill_reason, const char *kill_desc,union meminfo *mi, struct timespec *tm) {int i;int killed_size = 0;bool lmk_state_change_start = false;ALOGI("find_and_kill_multi_processes");for (i = OOM_SCORE_ADJ_MAX; i >= min_score_adj; i--) {struct proc *procp;while (true) {procp = kill_heaviest_task ? proc_get_heaviest(i) :(lmkd_config_enabled ? proc_adj_lru_skip(i) : proc_adj_lru(i));if (!procp)break;if (is_fast_kill_skip_process(procp, kill_desc))break;killed_size += kill_one_process(procp, min_score_adj, kill_reason, kill_desc, mi, tm);if (killed_size >= 0) {if (!lmk_state_change_start) {lmk_state_change_start = true;stats_write_lmk_state_changed(android::lmkd::stats::LMK_STATE_CHANGED__STATE__START);}}ALOGI("befault fast kill reclaim %dKB, required memory %dKB, last killed process's adj %d",killed_size, fast_kill_mem * 1024, i);if (strstr(kill_desc, "<do fast kill>")) {if (killed_size > fast_kill_mem * 1024) {ALOGI("fast kill reclaim %dKB, required memory %dKB, last killed process's adj %d",killed_size, fast_kill_mem * 1024, i);goto fast_kill_finished;}}}}fast_kill_finished:if (lmk_state_change_start) {stats_write_lmk_state_changed(android::lmkd::stats::LMK_STATE_CHANGED__STATE__STOP);}if (enhance_meminfo_enable && (killed_size > 0))trigger_enhance_meminfo(min_score_adj);return killed_size;
}
1G RAM的修改后的效果比较好,高负载情况下7-8秒下降为3-4秒。中低负载在1秒内。
方案3:常驻进程-需要修改AndroidManifest.xml,没有源码无法实现,有源码可以考虑
方案4:进程保活-将Dailer进程保活
这个实现也是基于sprd,需要设置内存级别,在内存压力的什么级别下保活,即被kill之后,会自动重启。
Android Go项目 来电铃声与UI不同步问题相关推荐
- Android小项目————聊天室(UI篇)
Android小项目----聊天室(UI篇) 一.前言 这是所做的第二个android项目,主要目的对暑假所学的java和android知识点进行复习巩固和实践,由于知识所限,目前这个聊天室并不是很完 ...
- ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 来电铃声的设置.手机闹钟.手势识别来电铃声的设置 MediaStore简介 Media ...
- 我的Android进阶之旅------Android系统设置默认来电铃声、闹钟铃声、通知铃声
首先了解Android系统本身提供的默认铃声文件,这些文件都放在 /system/media/audio 目录下. /system/media/audio/ringtones 系统来电铃声 / ...
- android 手机铃声设置铃声设置,Android 修改系统来电铃声
前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog ...
- Android开源项目以及开源框架,各种UI实现效果
开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...
- Android开源项目以及开源框架,各种UI实现效果。
开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...
- Android5.1自定义闹钟铃声,Android 设置来电铃声、通知铃声、闹钟铃声中的坑
最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...
- Android设置来电铃声和分享操作
之前项目里写的设置来电铃声和分享音频文件如下: //设置来电铃声public void setAsRingTone(String path) {Log.d(TAG, "setAsRingTo ...
- Android 设置来电铃声、通知铃声、闹钟铃声中的坑
最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...
- android闹钟铃声编码,Android 设置来电铃声、通知铃声、闹钟铃声中的坑
最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...
最新文章
- hausdorff距离
- 排序算法之计数排序、基数排序和桶排序
- 纯JavaScript实现弹出选择第几个单选按钮
- Bug同样的shell脚本在win与linux系统下执行不一样
- 02:输出最高分数的学生姓名
- day12装饰器进阶
- Tomcat 总体结构
- C#3种常见的定时器(多线程)
- [白开水]-maven的命令程序mvn脚本分析
- 广告智能定向技术lookalike
- 配置centOS下的Python
- 4.css命名书写规范
- 【2019年5月23日】指数估值排名
- 环比同比YOY\QoQ及QQ\PP图Q-Q\P-P…
- 使用visdom三维可视化图像。
- 除了压缩包加密,还有这些更好的文件加密方案
- e01文件镜像SHA1值
- Charles服务器代理使用
- vulnhub Funbox: 1
- TensorFlow 、Caffe等9大人工智能框架对比介绍