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

资深的食品行业网站开发网络推广是诈骗吗

资深的食品行业网站开发,网络推广是诈骗吗,网站平台怎么做的,wordpress转typechoMediaPlayer在运行时分为Client和Server两部分 Client层‌:位于Java层,用户通过调用Java层的API(如setDataSource)来操作MediaPlayer。 Server层‌:位于C层,负责实际的媒体处理工作。Server层通过Binder机…

MediaPlayer在运行时分为Client和Server两部分

Client层‌:位于Java层,用户通过调用Java层的API(如setDataSource)来操作MediaPlayer。
Server层‌:位于C++层,负责实际的媒体处理工作。Server层通过Binder机制与Client层进行通信,处理各种媒体操作‌

Binder机制在MediaPlayer中的作用

‌IPC通信‌:MediaPlayer的Client层和Server层通过JNI(Java Native Interface)进行交互,JNI层负责Java层和C++层之间的数据转换和函数调用。C++层的MediaPlayer通过BpMediaPlayerService这个proxy对象与远程服务端的MediaPlayerService(BnMediaPlayerService)进行IPC通信‌
‌会话管理‌:当Server端接收到Client端的请求时,MediaPlayerService会为每一个Client进程创建一个会话,并通过新建一个MediaPlayer::Client对象与其交互。这个对象再根据Client端请求的资源类型来创建相应的Player‌

以setDataSource函数为例,当Java层的setDataSource被调用时,它会通过JNI调用C++层的setDataSource函数。在C++层,setDataSource函数会通过IMediaPlayerService获取服务端的MediaPlayerService,然后调用其create函数来创建一个播放器对象。如果创建成功,再调用该对象的setDataSource方法来设置数据源‌。

status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length)
{ALOGV("setDataSource(%d, %" PRId64 ", %" PRId64 ")", fd, offset, le ngth);status_t err = UNKNOWN_ERROR;                                       //赋值一个未知错误状态  类似默认值const sp<IMediaPlayerService> service(getMediaPlayerService());     // 获取Server 端的MediaPlayerServiceif (service != 0) {                                                 //service不为空sp<IMediaPlayer> player(service->create(this, mAudioSessionId));//调用service的create函数if ((NO_ERROR != doSetRetransmitEndpoint(player)) ||(NO_ERROR != player->setDataSource(fd, offset, length))) {player.clear();}err = attachNewPlayer(player);}return err;
}
service的create函数干嘛啊
   sp<IMediaPlayer> MediaPlayerService::create(const sp<IMediaPlayerClient>& client,audio_session_t audioSessionId)
{pid_t pid = IPCThreadState::self()->getCallingPid();int32_t connId = android_atomic_inc(&mNextConnId);sp<Client> c = new Client(this, pid, connId, client, audioSessionId,IPCThreadState::self()->getCallingUid());                  //new ClientALOGV("Create new client(%d) from pid %d, uid %d, ", connId, pid,IPCThreadState::self()->getCallingUid());wp<Client> w = c;                                                  // 把构造的Client强引用对象复制成弱引用对象{Mutex::Autolock lock(mLock);                                   //互斥锁mClients.add(w);}return c;
}

new 了个嘛 Client?
在 frameworks/av/media/libmediaplayer-service/MediaPlayerService.h中

class Client:public BnMediaPlayer{
//此处省略一堆代码   
}

Client 对应Java层的MediaPlayer的相关方法。
Client继承关系 Client -> BnMediaPlayer -> IMediaPlayer.
so create函数干了嘛 -> 构造一个Client对象,并将此对象添加到MediaPlayerService类的全局列表mClients中,接着执行setDataSource 方法 player->setDataSource(fd, offset, length) 即 Clients::setDataSource;
so

  sp<IMediaPlayer> player(service->create(this, mAudioSessionId));// 约等于  sp<IMediaPlayer> player(newClient(**))

即player最终是用Client对象初始化的,那么就认为 player === Clent

Client 与 MediaPlayer 啥关系嘞!

对比 c++中 MediaPlayer 与 Client 的函数 发现 哇塞 肿么这么像;
MediaPlayer 与 Client 的函数是一一对应的,两者通过ClientD 代理类联系在一起,有媒婆作怪;
MediaPlayer::attachNewPlayer 就是这个函数搞事

s0 总结

就一个字 :感觉脑袋朦朦的

IPCThreadState 以下是 AI的回答

IPCThreadState 是 Android 中用于处理进程间通信(IPC, Inter-Process Communication)的一个类。它主要用于管理和调度与 Binder 相关的线程状态。以下是对 IPCThreadState 的详细介绍:

1. 什么是 IPC?

在 Android 中,IPC 是一种允许不同进程之间进行通信的机制。由于 Android 应用程序通常在不同的进程中运行,IPC 使得这些进程能够相互发送消息、共享数据和执行操作。

2. Binder

Binder 是 Android 中实现 IPC 的主要机制。它允许不同进程之间通过一个统一的接口进行交互。Binder 提供了高效的通信方式,尤其是在需要跨进程调用时。

3. IPCThreadState 的作用

IPCThreadState 主要负责以下几个方面:

  • 管理线程状态:它跟踪与 Binder 相关的线程状态,包括请求的处理和响应。
  • 请求和响应的调度IPCThreadState 管理来自客户端的请求,并将其分发到相应的服务处理。
  • 同步处理:它确保在多线程环境下对 Binder 交互的正确处理,避免数据竞争和不一致。
4. 主要方法

IPCThreadState 提供了一些关键方法来处理 IPC 过程中的状态:

  • join():使当前线程等待,直到有新的请求到达。
  • setCallingWorkSource():设置调用者的工作源,以便进行更好的资源管理和统计。
  • clearCallingWorkSource():清除当前调用者的工作源设置。
5. 使用示例

通常,开发者不直接使用 IPCThreadState,而是通过更高层次的 API(如 AIDL 或 Binder)来实现进程间通信。IPCThreadState 在底层处理中是透明的。

6. 结论

IPCThreadState 是 Android IPC 机制中的一个重要组成部分,它在后台管理着 Binder 线程的状态和请求处理。虽然开发者通常不直接与其交互,但理解其作用有助于更好地理解 Android 的 IPC 机制和 Binder 的工作原理。

详看 MediaPlayer的C/S架构

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

相关文章:

  • 网页版传奇世界什么组合最好神马移动排名优化
  • 河南省住房和城乡建设厅新网站苹果cms播放器
  • 苏州企业网站建设定制百度知道小程序
  • 招聘网站销售怎么做广告接单有什么平台
  • 网站注册表单怎么做网站外包一般多少钱啊
  • 石家庄网站建设案例西安关键词排名提升
  • 闵行网站开发软文范例大全300字
  • 成都网站建设推来客网站系统搜索引擎app
  • 信息技术九年级上册网站咋做营销广告文案
  • 一个页面的网站如何宣传网站
  • 建设工程类的网站合肥seo服务商
  • 烟台高端网站建设公司哪家好石家庄最新消息今天
  • 网站开发ppt模板进行网络推广
  • 电脑网页打不开怎么回事seo的工作内容
  • 网站建设哪里有国内最新新闻
  • 网站文章后台写完前台不显示电子商务seo实训总结
  • 中国有哪些网站百度联系电话
  • 建站最好的公司排名重庆网站推广联系方式
  • 网站营销网站优化微信推广费用一般多少
  • 校园网站的建设作用今晚比赛预测比分
  • 甘肃建设投资集团控股有限网站产品推广策划
  • 网站用户注册页面怎么做成人再就业培训班
  • 广州网站建设c2c销售怎么找客户源
  • 做ppt图表的网站贵州萝岗seo整站优化
  • 云南省建设厅建管处网站百度搜一下
  • 湖南建筑信息网湖南建设人力资源seo销售好做吗
  • 怎么搭建一个网站百度度小店申请入口
  • 黄山建设厅官方网站短视频推广公司
  • 公司门户网站什么意思关键词如何快速排名
  • 大连仟亿科技网站建设公司怎么样南通关键词优化平台