当前位置: 首页 > wzjs >正文

常州app制作aso优化前景

常州app制作,aso优化前景,网站页面设计原则,东胜网站制作一、启动 audioflinger是整个Android音频系统的核心,起到了承上启下的作用,承上就是为上层应用提供了各种访问和管理的接口,启下就是通过HAL来管理各种音频设备。 首先我们来看AudioFlinger是如何启动的。 int main(int argc __unused, ch…

一、启动

audioflinger是整个Android音频系统的核心,起到了承上启下的作用,承上就是为上层应用提供了各种访问和管理的接口,启下就是通过HAL来管理各种音频设备。

首先我们来看AudioFlinger是如何启动的。

int main(int argc __unused, char **argv)
{......signal(SIGPIPE, SIG_IGN);......sp<ProcessState> proc(ProcessState::self());sp<IServiceManager> sm = defaultServiceManager();ALOGI("ServiceManager: %p", sm.get());AudioFlinger::instantiate();AudioPolicyService::instantiate();if (mmapPolicy == AAUDIO_POLICY_AUTO || mmapPolicy == AAUDIO_POLICY_ALWAYS) {AAudioService::instantiate();}SoundTriggerHwService::instantiate();ProcessState::self()->startThreadPool();IPCThreadState::self()->joinThreadPool();}
}

这个audioserver主要做的就是把audio相关的一些服务给启动,我们仔细观察会发现同步路下还有一个rc文件

service audioserver /system/bin/audioserverclass coreuser audioserver# media gid needed for /dev/fm (radio) and for /data/misc/media (tee)group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acctioprio rt 4writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasksonrestart restart vendor.audio-hal-2-0# Keep the original service name for backward compatibility when upgrading# O-MR1 devices with framework-only.onrestart restart audio-hal-2-0on property:vts.native_server.on=1stop audioserver
on property:vts.native_server.on=0start audioserver

这里就通过vts.native_server.on开控制audioserver的start/stop,兵器在启动的时候会restart audio-hal,这部分后面再探讨。

下面我们来看看 AudioFlinger::instantiate(),这里的instantiate其实不是AudioFlinger内部的静态函数,而是BinderService类的一个实现,像AudioFlinger、AudioPolicyService等几个服务都继承自这个统一的Binder服务类。

class AudioFlinger :public BinderService<AudioFlinger>,public BnAudioFlinger

看名称可以知道这个就是实现了Binder跨进程通信相关的功能,看代码实际上他是一个模板类,其中instantiate用于把模板中的服务创建出来,然后添加到ServiceManager中。

template<typename SERVICE>
class BinderService
{
public:static status_t publish(bool allowIsolated = false,int dumpFlags = IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT) {sp<IServiceManager> sm(defaultServiceManager());return sm->addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated,dumpFlags);}static void instantiate() { publish(); }};

回过头来我们看看AudioFlinger的构造函数,其实里面基本没做什么,初始化了一些变量,还有log和debug相关的控制。

AudioFlinger::AudioFlinger(): BnAudioFlinger(),mMediaLogNotifier(new AudioFlinger::MediaLogNotifier()),mPrimaryHardwareDev(NULL),mAudioHwDevs(NULL),mHardwareStatus(AUDIO_HW_IDLE),mMasterVolume(1.0f),mMasterMute(false),// mNextUniqueId(AUDIO_UNIQUE_ID_USE_MAX),mMode(AUDIO_MODE_INVALID),mBtNrecIsOff(false),mIsLowRamDevice(true),mIsDeviceTypeKnown(false),mTotalMemory(0),mClientSharedHeapSize(kMinimumClientSharedHeapSizeBytes),mGlobalEffectEnableTime(0),mSystemReady(false)

那AudioFlinger实际是怎么启动工作的呢?刚刚我们提到了AudioFlinger继承BinderService,其实还集成了一个BnAudioFlinger,BnAudioFlinger又是由RefBase层层集成而来的,并且IServiceManager->addService的第二个参数是是一个强指针引用,(const sp&),所以AudioFlinger还具备了强指针的一个特性,就是第一次引用时调用onFirstRef。

void AudioFlinger::onFirstRef()
{Mutex::Autolock _l(mLock);/* TODO: move all this work into an Init() function */char val_str[PROPERTY_VALUE_MAX] = { 0 };if (property_get("ro.audio.flinger_standbytime_ms", val_str, NULL) >= 0) {uint32_t int_val;if (1 == sscanf(val_str, "%u", &int_val)) {mStandbyTimeInNsecs = milliseconds(int_val);} else {mStandbyTimeInNsecs = kDefaultStandbyTimeInNsecs;}}mPatchPanel = new PatchPanel(this);mMode = AUDIO_MODE_NORMAL;gAudioFlinger = this;
}

ro.audio.flinger_standbytime_ms为用户调整standby时间提供了一个接口 。接着初始化了一些有效的变量,从这个时候开始,AudioFlinger就是一个有意义的实体了,其他进程就可以通过ServiceManager去访问AudioFlinger,并且调用其中的一些接口来驱使AudioFlinger执行音频的处理操作。

到这里audioflinger就启动完成了,后面我们来看下audioflinger如何对音频设备进行管理。

http://www.dtcms.com/wzjs/245747.html

相关文章:

  • 自己做返利网站seo关键词排名优
  • 搭建平台的近义词qq关键词排名优化
  • 家居网站建设费用苏州网站建设公司
  • 东庄水利枢纽建设公司网站互联网推广平台有哪些
  • 自适应网站做百度推广seo是搜索引擎营销
  • 百度门户网站小说排行榜百度搜索风云榜
  • 大学生做家教靠谱网站品牌运营中心
  • 做市场分析的网站免费seo网站自动推广软件
  • 什么网站专做二手名表制作企业网站的公司
  • 宿迁做网站的公司济宁百度竞价推广
  • 重庆网站建设服务公司知乎seo
  • 珠海网站建设的公司哪家好如何结合搜索检索与seo推广
  • 昆山公司做网站cpa广告联盟平台
  • 服务器网站域名系统装置西安百度关键词包年
  • 网站开发 顺德最新资讯热点
  • 酒店网站建设日程表宁波网站推广
  • 陕西西安网站建设公司山东网络推广网站
  • 做淘宝客网站要注意什么网络营销服务的特点有哪些
  • 有没有可以做翻译的网站百度搜索风云榜单
  • 鑫灵锐做网站多少钱惠州seo管理
  • 电子商务网站源码下载广州网站制作公司
  • jsp借书网站开发北京seo经理
  • 如何保护我做的网站模板全网搜索
  • 做网页的it网站广告联盟app推广
  • 抖音推广联盟西安seo顾问培训
  • 响应式网站的建设整合营销理论
  • 做网站费用怎么入账网络推广专员岗位职责
  • 网站二级域名怎么设置网页制作的软件
  • 曲阜网站建设标题seo是什么意思
  • 网站设计多少钱一个百度网站排名seo