问题: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不同步问题相关推荐

  1. Android小项目————聊天室(UI篇)

    Android小项目----聊天室(UI篇) 一.前言 这是所做的第二个android项目,主要目的对暑假所学的java和android知识点进行复习巩固和实践,由于知识所限,目前这个聊天室并不是很完 ...

  2. ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 来电铃声的设置.手机闹钟.手势识别来电铃声的设置 MediaStore简介 Media ...

  3. 我的Android进阶之旅------Android系统设置默认来电铃声、闹钟铃声、通知铃声

    首先了解Android系统本身提供的默认铃声文件,这些文件都放在  /system/media/audio  目录下. /system/media/audio/ringtones   系统来电铃声 / ...

  4. android 手机铃声设置铃声设置,Android 修改系统来电铃声

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog ...

  5. Android开源项目以及开源框架,各种UI实现效果

    开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...

  6. Android开源项目以及开源框架,各种UI实现效果。

    开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...

  7. Android5.1自定义闹钟铃声,Android 设置来电铃声、通知铃声、闹钟铃声中的坑

    最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...

  8. Android设置来电铃声和分享操作

    之前项目里写的设置来电铃声和分享音频文件如下: //设置来电铃声public void setAsRingTone(String path) {Log.d(TAG, "setAsRingTo ...

  9. Android 设置来电铃声、通知铃声、闹钟铃声中的坑

    最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...

  10. android闹钟铃声编码,Android 设置来电铃声、通知铃声、闹钟铃声中的坑

    最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...

最新文章

  1. hausdorff距离
  2. 排序算法之计数排序、基数排序和桶排序
  3. 纯JavaScript实现弹出选择第几个单选按钮
  4. Bug同样的shell脚本在win与linux系统下执行不一样
  5. 02:输出最高分数的学生姓名
  6. day12装饰器进阶
  7. Tomcat 总体结构
  8. C#3种常见的定时器(多线程)
  9. [白开水]-maven的命令程序mvn脚本分析
  10. 广告智能定向技术lookalike
  11. 配置centOS下的Python
  12. 4.css命名书写规范
  13. 【2019年5月23日】指数估值排名
  14. 环比同比YOY\QoQ及QQ\PP图Q-Q\P-P…
  15. 使用visdom三维可视化图像。
  16. 除了压缩包加密,还有这些更好的文件加密方案
  17. e01文件镜像SHA1值
  18. Charles服务器代理使用
  19. vulnhub Funbox: 1
  20. TensorFlow 、Caffe等9大人工智能框架对比介绍

热门文章

  1. 物体移动时按下Shift键加快速度
  2. 用户权限---u+s\g+s\o+t三个特殊权限说明
  3. 智能网联汽车云控系统第5部分:平台服务场景规范
  4. srsLTE学习笔记(一)——eNB配置文件enb.conf解析
  5. echarts 折线图
  6. slack 时钟_【基础知识】时序(Slack、Setup、Hold、Jitter、Skew、亚稳态)
  7. matlab计算恒向线航程
  8. Android设置标题栏透明
  9. 用maven-replacer插件选择正则表达式替换
  10. 小牛电动IPO:四年跌宕起伏 一代天才少年李一男终圆梦