Android 系统(208)---OTA升级后概率性出现卡在开机动画界面无法退出

OTA升级后概率性出现卡在开机动画界面无法退出

OTA升级之后,手机会概率性卡在开机动画界面,log 显示 media.player died:

01-01 20:06:46.273062 288 288 E art : Cannot patch secondary image '/system/framework/boot-framework.art', clearing dalvik_cache and restarting zygote.  //<==zygote重启

01-01 20:06:46.298441 247 247 I ServiceManager: service 'media.player' died  

01-01 20:06:46.306115 513 574 D BootAnimation: threadLoop() movie() //<==开始播放开机动画

导致开机动画退出不了,也没有开机铃声播放。

原因:

OTA之后第一次开机,由于zygote检测到boot-framework.art这支文件的校验和不对(system分区在OTA升级后会更新,但是data分区下的文件在OTA升级中不更新仍旧是旧版本的,造成data和system目录下的.art、.oat文件不匹配),于是clearing了dalvik-cache里面的内容。zygote重启,zygote挂掉之后,引起media server挂掉,进而导致没有声音。也无法满足开机动画退出条件checkExit();。

解决方法:

修改BootAnimation.cpp:
491bool BootAnimation::threadLoop() 
492{
……
498 status_tmediastatus = NO_ERROR;
…… 
508 if (mediastatus == NO_ERROR) { 
509 ALOGD("mediaplayer is initialized"); 
510 Parcel* attributes = new Parcel(); 
511 attributes->writeInt32(AUDIO_USAGE_MEDIA); //usage 
512 attributes->writeInt32(AUDIO_CONTENT_TYPE_MUSIC); //audio_content_type_t 
513 attributes->writeInt32(AUDIO_SOURCE_DEFAULT); //audio_source_t 
514 attributes->writeInt32(0); //audio_flags_mask_t 
515 attributes->writeInt32(1); //kAudioAttributesMarshallTagFlattenTags of mediaplayerservice.cpp 
516 attributes->writeString16(String16("BootAnimationAudioTrack")); // tags 
517 mediaplayer->setParameter(KEY_PARAMETER_AUDIO_ATTRIBUTES, *attributes); 
518 mediaplayer->setAudioStreamType(AUDIO_STREAM_MUSIC); 
519 mediastatus = mediaplayer->prepare(); 
520 } 
521 if (mediastatus == NO_ERROR) { 
522 ALOGD("media player is prepared"); 
523 mediastatus = mediaplayer->start(); 
524 }
//If the mediastatus is not NO_ERROR, mBootVideoPlayState = MEDIA_ERROR.
if(mediastatus != NO_ERROR){ //add code
mBootVideoPlayState = MEDIA_ERROR; //add code
} //add code 

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/81142761