处理异步binder调用的方法和装置与流程

文档序号:32132280发布日期:2022-11-09 10:34阅读:51来源:国知局
1.本技术涉及终端领域,具体涉及一种处理异步binder调用的方法和装置。
背景技术
::2.终端设备通常是指包括集成电路、晶体管或电子管等电子元器件,并且基于操作系统和第三方应用实现特定功能的设备。用户在使用终端设备时,可能会通过第三方应用控制终端设备实现特定功能,例如,用户点击屏幕上的视频图标后,视频播放器(第三方应用的一个示例)通过与操作系统的交互播放视频。3.用户在使用终端设备的过程中,可能会出现“冻屏”现象。例如,用户点击屏幕上的视频图标后,终端设备未播放视频,并且,终端设备对用户后续的操作也不再做出反应,终端设备的屏幕如同被冻结一般。如何避免冻屏现象是当前需要解决的问题。技术实现要素:4.本技术实施例提供了一种处理异步binder调用的方法和装置,能够避免冻屏现象的出现。5.第一方面,提供了一种处理异步binder调用的方法,所述方法包括:6.检测系统进程的异步binder缓冲的占用空间;7.当所述占用空间大于或等于门限值时,从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,所述m和所述n为正整数,所述m大于或等于所述n;8.释放分配给所述n个目标进程的异步binder缓冲。9.binder是终端设备的进程之间的一种通信机制,系统进程的异步binder接口被另外一个进程(如用户进程)调用后,终端设备需要为该用户进程分配异步binder缓冲,在异步binder调用机制下,该用户进程无需等待本次调用的结果即可再次调用系统进程,因此,在一些情况下,例如,系统进程处理异步binder调用出错的情况下,用户进程会循环调用系统进程的异步binder接口,导致系统进程的异步binder缓冲资源耗尽,系统进程后续无法再响应其他进程的调用请求,从而导致冻屏现象。在上述实施例中,终端设备检测到系统进程的异步binder缓冲的占用空间大于或等于门限值时,从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,并释放分配给该n个目标进程的异步binder缓冲,从而可以避免系统进程的异步binder缓冲资源耗尽导致的冻屏现象。10.可选地,所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,包括:11.从直接调用所述异步binder接口的p个进程中确定第一进程,所述第一进程为所述p个进程中调用所述异步binder接口的次数最多的进程,所述p为小于或等于所述m的正整数;12.当所述第一进程为第三方应用进程时,确定所述第一进程为所述n个目标进程中的一个。13.造成冻屏现象的主要原因是第三方应用开发时未做好适配导致系统进程处理异步binder接口调用时出错,因此,当第一进程为调用异步binder接口的次数最多的第三方应用进程时,第一进程是最有可能导致冻屏的进程,将第一进程作为目标进程,释放分配给第一进程的binder缓冲,能够有效避免冻屏出现。14.可选地,所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,包括:15.当所述第一进程为非第三方应用进程时,从通过所述第一进程调用所述异步binder接口的q个进程中确定第二进程,所述第二进程为所述q个进程中调用所述异步binder接口的次数最多的进程,所述q为小于或等于所述m的正整数;16.当所述第二进程为第三方应用进程时,确定所述第二进程为所述n个目标进程中的一个。17.当第一进程不是第三方应用进程时,第一进程导致冻屏的可能性不大,可以从通过第一进程调用系统进程的q个进程中确定第二进程,即,从q个进程中确定调用所述异步binder接口的次数最多的进程,释放分配给第二进程的binder缓冲,能够有效避免冻屏出现。18.可选地,所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程之前,所述方法还包括:19.确定k个进程,所述k个进程为所述系统进程的异步binder接口的调用链的源头进程,所述k为正整数;20.从所述k个进程中确定所述m个进程,所述m个进程为第三方应用进程;21.所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,包括:22.从所述m个进程中确定调用所述异步binder接口的次数最多的n个进程为所述n个目标进程。23.终端设备可以在确定系统进程的异步binder接口的调用链的源头后再确定目标进程,这样可以准确确定调用异步binder接口的次数最多的n个进程,从而可以有效避免冻屏出现。24.可选地,所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,包括:25.当所述m个进程包括调用所述异步binder接口的次数相同的h个进程时,并且,当所述h个进程调用所述异步binder接口的次数是所述m个进程中最多的进程时,从所述h个进程中确定n个调用所述异步binder接口的时间最早的进程为所述n个目标进程,所述h为大于所述n的正整数。26.当h个进程调用系统进程的异步binder接口的次数相同时,并且,当h个进程是调用异步binder接口的次数是m个进程中最多的进程时,终端设备可以根据h个进程的调用时间确定n个目标进程,调用时间最早的进程大概率是发生调用失败的进程,将调用时间最早的n个进程确定为目标进程可以准确排除导致冻屏现象的隐患。27.可选地,所述方法还包括:28.在所述n个目标进程的异步binder缓冲释放之后,再次检测系统进程的异步binder缓冲的占用空间;29.当所述再次检测的检测结果大于或等于所述门限值时,从所述m个进程中剩余的进程中确定l个目标进程,所述l为正整数;30.释放分配给所述l个目标进程的异步binder缓冲。31.如果n个目标进程的异步binder缓冲释放之后,系统进程的异步binder缓冲的占用空间仍然大于或等于门限值,说明仍然有进程在循环调用系统进程的异步binder接口,终端设备可以再次从剩余的进程中确定l个目标进程,释放分配给l个目标进程的异步binder缓冲,避免冻屏现象的出现。32.可选地,所述n等于1。33.当n等于1时,终端设备执行的方案是逐个释放目标进程占用的异步binder缓冲,这样可以避免一次释放多个目标进程占用的异步binder缓冲导致正常业务受到影响。34.可选地,所述方法还包括:35.关闭所述n个目标进程。36.关闭目标进程可以避免目标进程再次调用系统进程的异步binder接口,彻底消除导致冻屏现象的隐患。37.可选地,所述系统进程为系统服务进程。38.第二方面,提供了一种处理处理异步binder调用的装置,包括用于执行第一方面中任一种方法的单元。该装置可以是终端设备,也可以是终端设备内的芯片。该装置可以包括输入单元和处理单元。39.当该装置是终端设备时,该处理单元可以是处理器,该输入单元可以是通信接口;该终端设备还可以包括存储器,该存储器用于存储计算机程序代码,当该处理器执行该存储器所存储的计算机程序代码时,使得该终端设备执行第一方面中的任一种方法。40.当该装置是终端设备内的芯片时,该处理单元可以是芯片内部的逻辑处理单元,该输入单元可以是输出接口、管脚或电路等;该芯片还可以包括存储器,该存储器可以是该芯片内的存储器(例如,寄存器、缓存等),也可以是位于该芯片外部的存储器(例如,只读存储器、随机存取存储器等);该存储器用于存储计算机程序代码,当该处理器执行该存储器所存储的计算机程序代码时,使得该芯片执行第一方面的任一种方法。41.第三方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序代码,当所述计算机程序代码被处理处理异步binder调用的装置运行时,使得该装置执行第一方面中的任一种方法。42.第四方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码被处理处理异步binder调用的装置运行时,使得该装置执行第一方面中的任一种方法。附图说明43.图1是一种适用于本技术的装置的硬件结构的示意图;44.图2是一种适用于本技术的装置的软件结构的示意图;45.图3是本技术提供的一种ipc通信方法的示意图;46.图4是本技术提供的一种binder机制的示意图;47.图5是本技术提供的一种binder通信流程的示意图;48.图6是本技术提供的一种异步binder调用的时序关系的示意图;49.图7是本技术提供的一种处理异步binder调用的方法的示意图;50.图8是本技术提供的另一种处理异步binder调用的方法的示意图;51.图9是本技术提供的一种直接调用异步binder调用接口时处理异步binder调用的方法的示意图;52.图10是本技术提供的一种确定调用异步binder接口次数最多的第三方应用进程的方法的示意图;53.图11是本技术提供的一种间接调用异步binder调用接口时处理异步binder调用的方法的示意图;54.图12是本技术提供的一种处理异步binder调用的装置的示意图。具体实施方式55.下面将结合附图,对本技术实施例中的技术方案进行描述。56.图1示出了一种适用于本技术的装置的硬件结构。57.装置100可以是手机、可折叠电子设备、平板电脑、桌面型计算机、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、上网本、蜂窝电话、个人数字助理(personaldigitalassistant,pda)、增强现实(augmentedreality,ar)设备、虚拟现实(virtualreality,vr)设备、人工智能(artificialintelligence,ai)设备、可穿戴式设备、车载设备、智能家居设备或智慧城市设备。本技术实施例对该装置100的具体类型不作特殊限制。58.装置100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserialbus,usb)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,传感器模块180,按键190,马达191,指示器192,摄像模组193,显示屏194,以及用户标识模块(subscriberidentificationmodule,sim)卡接口195等。其中传感器模块180可以包括压力传感器180a,陀螺仪传感器180b,气压传感器180c,磁传感器180d,加速度传感器180e,距离传感器180f,接近光传感器180g,指纹传感器180h,温度传感器180j,触摸传感器180k,环境光传感器180l,骨传导传感器180m等。59.需要说明的是,图1所示的结构并不构成对装置100的具体限定。在本技术另一些实施例中,装置100可以包括比图1所示的部件更多或更少的部件,或者,装置100可以包括图1所示的部件中某些部件的组合,或者,装置100可以包括图1所示的部件中某些部件的子部件。图1示的部件可以以硬件、软件、或软件和硬件的组合实现。60.处理器110可以包括一个或多个处理单元。例如,处理器110可以包括以下处理单元中的至少一个:应用处理器(applicationprocessor,ap)、调制解调处理器、图形处理器(graphicsprocessingunit,gpu)、图像信号处理器(imagesignalprocessor,isp)、控制器、视频编解码器、数字信号处理器(digitalsignalprocessor,dsp)、基带处理器、神经网络处理器(neural-networkprocessingunit,npu)。其中,不同的处理单元可以是独立的器件,也可以是集成的器件。61.控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。62.处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。63.在一些实施例中,处理器110可以包括一个或多个接口。例如,处理器110可以包括以下接口中的至少一个:内部集成电路(inter-integratedcircuit,i2c)接口、内部集成电路音频(inter-integratedcircuitsound,i2s)接口、脉冲编码调制(pulsecodemodulation,pcm)接口、通用异步接收传输器(universalasynchronousreceiver/transmitter,uart)接口、移动产业处理器接口(mobileindustryprocessorinterface,mipi)、通用输入输出(general-purposeinput/output,gpio)接口、sim接口、usb接口。64.i2c接口是一种双向同步串行总线,包括一根串行数据线(serialdataline,sda)和一根串行时钟线(derailclockline,scl)。在一些实施例中,处理器110可以包含多组i2c总线。处理器110可以通过不同的i2c总线接口分别耦合触摸传感器180k、充电器、闪光灯、摄像模组193等。例如:处理器110可以通过i2c接口耦合触摸传感器180k,使处理器110与触摸传感器180k通过i2c总线接口通信,实现装置100的触摸功能。65.i2s接口可以用于音频通信。在一些实施例中,处理器110可以包含多组i2s总线。处理器110可以通过i2s总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过i2s接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。66.pcm接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过pcm接口耦合。在一些实施例中,音频模块170也可以通过pcm接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述i2s接口和所述pcm接口都可以用于音频通信。67.uart接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,uart接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过uart接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过uart接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。68.mipi接口可以被用于连接处理器110与显示屏194和摄像模组193等外围器件。mipi接口包括摄像头串行接口(cameraserialinterface,csi)、显示屏串行接口(displayserialinterface,dsi)等。在一些实施例中,处理器110和摄像模组193通过csi接口通信,实现装置100的拍摄功能。处理器110和显示屏194通过dsi接口通信,实现装置100的显示功能。69.gpio接口可以通过软件配置。gpio接口可以被配置为控制信号接口,也可被配置为数据信号接口。在一些实施例中,gpio接口可以用于连接处理器110与摄像模组193,显示屏194、无线通信模块160、音频模块170和传感器模块180。gpio接口还可以被配置为i2c接口、i2s接口、uart接口或mipi接口。70.图1所示的各模块间的连接关系只是示意性说明,并不构成对装置100的各模块间的连接关系的限定。可选地,装置100的各模块可以采用与上述实施例中的连接方式不同的接口连接方式,或者,装置100的各模块可以采用上述实施例中多种连接方式的组合。71.usb接口130是符合usb标准规范的接口,例如可以是迷你(mini)usb接口、微型(micro)usb接口或c型usb(usbtypec)接口。usb接口130可以用于连接充电器为装置100充电,也可以用于装置100与外围设备之间传输数据,还可以用于连接耳机以通过耳机播放音频。usb接口130还可以用于连接其他装置,例如ar设备。72.充电管理模块140用于从充电器接收电力。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过usb接口130接收有线充电器的电流。在一些无线充电的实施例中,充电管理模块140可以通过装置100的无线充电线圈接收电磁波(电流路径如虚线所示)。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为装置100供电。73.电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像模组193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量、电池循环次数和电池健康状态(例如,漏电、阻抗)等参数。可选地,电源管理模块141可以设置于处理器110中,或者,电源管理模块141和充电管理模块140可以设置于同一个器件中。74.装置100的无线通信功能可以通过天线1、天线2、移动通信模块150、无线通信模块160、调制解调处理器以及基带处理器等器件实现。75.天线1和天线2用于发射和接收电磁波信号。装置100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。76.移动通信模块150可以提供应用在装置100上的无线通信的解决方案,例如下列方案中的至少一个:第二代(2thgeneration,2g)移动通信解决方案、第三代(3thgeneration,3g)移动通信解决方案、第四代(4thgeneration,5g)移动通信解决方案、第五代(5thgeneration,5g)移动通信解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoiseamplifier,lna)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波和放大等处理,随后传送至调制解调处理器进行解调。移动通信模块150还可以放大经调制解调处理器调制后的信号,放大后的该信号经天线1转变为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。77.调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(例如,扬声器170a、受话器170b)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。78.与移动通信模块150类似,无线通信模块160也可以提供应用在装置100上的无线通信解决方案,例如下列方案中的至少一个:无线局域网(wirelesslocalareanetworks,wlan)、蓝牙(bluetooth,bt)、全球导航卫星系统(globalnavigationsatellitesystem,gnss)、调频(frequencymodulation,fm)、近场通信(nearfieldcommunication,nfc)、红外(infrared,ir)。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,并将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频和放大,该信号经天线2转变为电磁波辐射出去。79.在一些实施例中,装置100的天线1和移动通信模块150耦合,装置100的天线2和无线通信模块160耦合。80.装置100可以通过gpu、显示屏194以及应用处理器实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。81.显示屏194可以用于显示图像或视频。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)、有源矩阵有机发光二极体(active-matrixorganiclight-emittingdiode,amoled)、柔性发光二极管(flexlight-emittingdiode,fled)、迷你发光二极管(minilight-emittingdiode,miniled)、微型发光二极管(microlight-emittingdiode,microled)、微型oled(microoled)或量子点发光二极管(quantumdotlightemittingdiodes,qled)。在一些实施例中,装置100可以包括1个或n个显示屏194,n为大于1的正整数。82.装置100可以通过摄像模组193、isp、dsp、视频编解码器、gpu、显示屏194以及应用处理器等实现拍摄功能。83.摄像模组193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(chargecoupleddevice,ccd)或互补金属氧化物半导体(complementarymetal-oxide-semiconductor,cmos)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的红绿蓝(redgreenblue,rgb),yuv等格式的图像信号。在一些实施例中,装置100可以包括1个或n个摄像模组193,n为大于1的正整数。84.isp用于处理摄像模组193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给isp处理,转化为肉眼可见的图像。isp可以对图像的噪点、亮度和色彩进行算法优化,isp还可以优化拍摄场景的曝光和色温等参数。在一些实施例中,isp可以设置在摄像模组193中。85.dsp用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当装置100在频点选择时,dsp用于对频点能量进行傅里叶变换等。86.视频编解码器用于对数字视频压缩或解压缩。装置100可以支持一种或多种视频编解码器。这样,装置100可以播放或录制多种编码格式的视频,例如:动态图像专家组(movingpictureexpertsgroup,mpeg)1、mpeg2、mpeg3和mpeg4。87.npu是一种借鉴生物神经网络结构的处理器,例如借鉴人脑神经元之间传递模式对输入信息快速处理,还可以不断地自学习。通过npu可以实现装置100的智能认知等功能,例如:图像识别、人脸识别、语音识别和文本理解。88.在一些实施例中,摄像模组193可以由彩色摄像模组和3d感测模组组成。89.在一些实施例中,彩色摄像模组的摄像头的感光元件可以是ccd或cmos光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。90.在一些实施例中,3d感测模组可以是飞行时间(timeofflight,tof)3d感测模块或结构光(structuredlight)3d感测模块。其中,结构光3d感测是一种主动式深度感测技术,结构光3d感测模组的基本零组件可包括ir发射器、ir相机模等。结构光3d感测模组的工作原理是先对被拍摄物体发射特定图案的光斑(pattern),再接收该物体表面上的光斑图案编码(lightcoding),进而比对与原始投射光斑的异同,并利用三角原理计算出物体的三维坐标。该三维坐标中就包括装置100距离被拍摄物体的距离。其中,tof3d感测可以是主动式深度感测技术,tof3d感测模组的基本组件可包括ir发射器、ir相机模等。tof3d感测模组的工作原理是通过红外线折返的时间去计算tof3d感测模组跟被拍摄物体之间的距离(即深度),以得到3d景深图。91.结构光3d感测模组还可应用于人脸识别、体感游戏机、工业用机器视觉检测等领域。tof3d感测模组还可应用于游戏机、ar/vr等领域。92.在另一些实施例中,摄像模组193还可以由两个或更多个摄像头构成。这两个或更多个摄像头可包括彩色摄像头,彩色摄像头可用于采集被拍摄物体的彩色图像数据。这两个或更多个摄像头可采用立体视觉(stereovision)技术来采集被拍摄物体的深度数据。立体视觉技术是基于人眼视差的原理,在自然光源下,透过两个或两个以上的摄像头从不同的角度对同一物体拍摄影像,再进行三角测量法等运算来得到装置100与被拍摄物之间的距离信息,即深度信息。93.在一些实施例中,装置100可以包括1个或多个摄像模组193。例如,装置100可以包括1个前置摄像模组193以及1个后置摄像模组193。其中,前置摄像模组193通常可用于采集面对显示屏194的拍摄者自己的彩色图像数据以及深度数据,后置摄像模组可用于采集拍摄者所面对的拍摄对象(如人物、风景等)的彩色图像数据以及深度数据。94.在一些实施例中,处理器110中的cpu、gpu或npu可以对摄像模组193所采集的彩色图像数据和深度数据进行处理。在一些实施例中,npu可以通过骨骼点识别技术所基于的神经网络算法,例如卷积神经网络算法来识别摄像模组193所采集的彩色图像数据,以确定被拍摄人物的骨骼点。cpu或gpu也可来运行神经网络算法以实现根据彩色图像数据确定被拍摄人物的骨骼点。在一些实施例中,cpu、gpu或npu还可用于根据摄像模组193(可以是3d感测模组)所采集的深度数据和已识别出的骨骼点来确认被拍摄人物的身材(如身体比例、骨骼点之间的身体部位的胖瘦情况),并可以进一步确定针对该被拍摄人物的身体美化参数,最终根据该身体美化参数对被拍摄人物的拍摄图像进行处理,以使得该拍摄图像中该被拍摄人物的体型被美化。95.外部存储器接口120可以用于连接外部存储卡,例如安全数码(securedigital,sd)卡,实现扩展装置100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。96.内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能(例如,声音播放功能和图像播放功能)所需的应用程序。存储数据区可存储装置100使用过程中所创建的数据(例如,音频数据和电话本)。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如:至少一个磁盘存储器件、闪存器件和通用闪存存储器(universalflashstorage,ufs)等。处理器110通过运行存储在内部存储器121的指令和/或存储在设置于处理器中的存储器的指令,执行装置100的各种处理方法。97.装置100可以通过音频模块170、扬声器170a、受话器170b、麦克风170c、耳机接口170d以及应用处理器等实现音频功能,例如,音乐播放和录音。98.音频模块170用于将数字音频信息转换成模拟音频信号输出,也可以用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170或者音频模块170的部分功能模块可以设置于处理器110中。99.扬声器170a,也称为喇叭,用于将音频电信号转换为声音信号。装置100可以通过扬声器170a收听音乐或免提通话。100.受话器170b,也称为听筒,用于将音频电信号转换成声音信号。当用户使用装置100接听电话或语音信息时,可以通过将受话器170b靠近耳朵接听语音。101.麦克风170c,也称为话筒或传声器,用于将声音信号转换为电信号。当用户拨打电话或发送语音信息时,可以通过靠近麦克风170c发声将声音信号输入麦克风170c。装置100可以设置至少一个麦克风170c。在另一些实施例中,装置100可以设置两个麦克风170c,以实现降噪功能。在另一些实施例中,装置100还可以设置三个、四个或更多麦克风170c,以实现声音信号采集、降噪、识别声音来源和定向录音等功能。102.耳机接口170d用于连接有线耳机。耳机接口170d可以是usb接口130,也可以是3.5mm的开放移动装置100平台(openmobileterminalplatform,omtp)标准接口,美国蜂窝电信工业协会(cellulartelecommunicationsindustryassociationoftheusa,ctia)标准接口。103.压力传感器180a用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180a可以设置于显示屏194。压力传感器180a的种类很多,例如可以是电阻式压力传感器、电感式压力传感器或电容式压力传感器。电容式压力传感器可以是包括至少两个具有导电材料的平行板,当力作用于压力传感器180a,电极之间的电容改变,装置100根据电容的变化确定压力的强度。当触摸操作作用于显示屏194时,装置100根据压力传感器180a检测所述触摸操作。装置100也可以根据压力传感器180a的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令;当触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。104.陀螺仪传感器180b可以用于确定装置100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180b确定装置100围绕三个轴(即,x轴、y轴和z轴)的角速度。陀螺仪传感器180b可以用于拍摄防抖。例如,当快门被按下时,陀螺仪传感器180b检测装置100抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消装置100的抖动,实现防抖。陀螺仪传感器180b还可以用于导航和体感游戏等场景。105.气压传感器180c用于测量气压。在一些实施例中,装置100通过气压传感器180c测得的气压值计算海拔高度,辅助定位和导航。106.磁传感器180d包括霍尔传感器。装置100可以利用磁传感器180d检测翻盖皮套的开合。在一些实施例中,当装置100是翻盖机时,装置100可以根据磁传感器180d检测翻盖的开合。装置100可以根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。107.加速度传感器180e可检测装置100在各个方向上(一般为x轴、y轴和z轴)加速度的大小。当装置100静止时可检测出重力的大小及方向。加速度传感器180e还可以用于识别装置100的姿态,作为横竖屏切换和计步器等应用程序的输入参数。108.距离传感器180f用于测量距离。装置100可以通过红外或激光测量距离。在一些实施例中,例如在拍摄场景中,装置100可以利用距离传感器180f测距以实现快速对焦。109.接近光传感器180g可以包括例如发光二极管(light-emittingdiode,led)和光检测器,例如,光电二极管。led可以是红外led。装置100通过led向外发射红外光。装置100使用光电二极管检测来自附近物体的红外反射光。当检测到反射光时,装置100可以确定附近存在物体。当检测不到反射光时,装置100可以确定附近没有物体。装置100可以利用接近光传感器180g检测用户是否手持装置100贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器180g也可用于皮套模式或口袋模式的自动解锁与自动锁屏。110.环境光传感器180l用于感知环境光亮度。装置100可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180l也可用于拍照时自动调节白平衡。环境光传感器180l还可以与接近光传感器180g配合,检测装置100是否在口袋里,以防误触。111.指纹传感器180h用于采集指纹。装置100可以利用采集的指纹特性实现解锁、访问应用锁、拍照和接听来电等功能。112.温度传感器180j用于检测温度。在一些实施例中,装置100利用温度传感器180j检测的温度,执行温度处理策略。例如,当温度传感器180j上报的温度超过阈值,装置100执行降低位于温度传感器180j附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,装置100对电池142加热,以避免低温导致装置100异常关机。在其他一些实施例中,当温度低于又一阈值时,装置100对电池142的输出电压执行升压,以避免低温导致的异常关机。113.触摸传感器180k,也称为触控器件。触摸传感器180k可以设置于显示屏194,由触摸传感器180k与显示屏194组成触摸屏,触摸屏也称为触控屏。触摸传感器180k用于检测作用于其上或其附近的触摸操作。触摸传感器180k可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180k也可以设置于装置100的表面,并且与显示屏194设置于不同的位置。114.骨传导传感器180m可以获取振动信号。在一些实施例中,骨传导传感器180m可以获取人体声部振动骨块的振动信号。骨传导传感器180m也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器180m也可以设置于耳机中,结合成骨传导耳机。音频模块170可以基于所述骨传导传感器180m获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于所述骨传导传感器180m获取的血压跳动信号解析心率信息,实现心率检测功能。115.按键190包括开机键和音量键。按键190可以是机械按键,也可以是触摸式按键。装置100可以接收按键输入信号,实现于案件输入信号相关的功能。116.马达191可以产生振动。马达191可以用于来电提示,也可以用于触摸反馈。马达191可以对作用于不同应用程序的触摸操作产生不同的振动反馈效果。对于作用于显示屏194的不同区域的触摸操作,马达191也可产生不同的振动反馈效果。不同的应用场景(例如,时间提醒、接收信息、闹钟和游戏)可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。117.指示器192可以是指示灯,可以用于指示充电状态和电量变化,也可以用于指示消息、未接来电和通知。118.sim卡接口195用于连接sim卡。sim卡可以插入sim卡接口195实现与装置100的接触,也可以从sim卡接口195拔出实现与装置100的分离。装置100可以支持1个或n个sim卡接口,n为大于1的正整数。同一个sim卡接口195可以同时插入多张卡,所述多张卡的类型可以相同,也可以不同。sim卡接口195也可以兼容外部存储卡。装置100通过sim卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,装置100采用嵌入式sim(embedded-sim,esim)卡,esim卡可以嵌在装置100中,不能和装置100分离。119.上文详细描述了装置100的硬件系统,下面介绍装置100的软件系统。软件系统可以采用分层架构、事件驱动架构、微核架构、微服务架构或云架构,本技术实施例以分层架构为例,示例性地描述装置100的软件系统。120.如图2所示,采用分层架构的软件系统分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,软件系统可以分为五层,从上至下分别为应用程序层、应用程序框架层、原生(native)层、硬件抽象层(hardwareabstractlayer,hal)以及内核层。121.应用程序层可以包括一系列应用程序包。122.应用程序包可以包括相机、日历、通话、地图、wlan、音乐、短信、图库、通话、导航、蓝牙和视频等应用程序(application,app)。123.应用程序框架层为应用程序层的应用程序提供应用程序编程接口(applicationprogramminginterface,api)和编程框架。应用程序框架层可以包括一些预定义的函数。124.例如,应用程序框架层包括系统服务和媒体服务。125.系统服务(systemserver)是一个进程,提供了很多子系统服务,每个子系统服务都以线程的形态运行,等待应用程序发出的请求,然后对请求进行处理,再将结果返回给应用程序。上述子系统服务例如包括窗口管理服务(windowmanagerservice,wms)、通知管理服务(notificationmanagerservice,nms)、活动管理服务(activitymanagerservice,ams)和输入管理服务(inputmanagerservice,ims)。126.wms可以用于窗口管理、窗口动画管理、surface管理以及作为输入系统的中转站。127.nms使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如nms被用于下载完成告知和消息提醒。nms还可以管理以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知。nms还可以管理以对话窗口形式出现在屏幕上的通知,例如在状态栏提示文本信息、发出提示音、电子设备振动以及指示灯闪烁。128.ams可以用于系统组件(例如,活动、服务、内容提供者和广播接收器)的启动、切换、调度以及应用进程的管理和调度工作。129.ims可以用于管理系统的输入,例如,触摸屏输入、按键输入和传感器输入等。ims从输入设备节点取出事件,通过和wms的交互,将事件分配至合适的窗口。130.媒体服务(mediaserver)负责播放音频和视频的播放,以及拍照录像的进程。131.native层又称为系统运行库层,包含原生c/c++库和安卓运行时(androidruntime,art)。132.原生c/c++库可以包括多个功能模块,例如:服务管理器(servicemanager)、媒体框架(mediaframework)、3d图形处理库(例如,嵌入系统开放图形库(opengraphicslibraryforembeddedsystem,opengles))、2d图形引擎(例如,影像图形库(skiagraphicslibrary,sgl))和binder接口。133.服务管理器(servicemanager)是binder机制的管家进程,一般系统服务会先注册到servicemanager中,然后客户端(client)会通过servicemanager来获取服务端(server)的注册信息(如,句柄),这时候客户端就和服务端进行进程间通信(inter-processcommunication,ipc)了。134.媒体框架支持多种音频格式的回放和录制、多种视频格式回放和录制以及静态图像文件。媒体框架可以支持多种音视频编码格式,例如:mpeg4、h.264、动态图像专家组音频层面ⅲ(movingpictureexpertsgroupaudiolayerⅲ,mp3)、高级音频编码(advancedaudiocoding,aac)、自适应多速率(adaptivemulti-rate,amr)、联合图像专家组(jointphotographicexpertsgroup,jpeg)和便携式网络图形(portablenetworkgraphics,png)。135.3d图形处理库可以用于实现3d图形绘图、图像渲染、合成和图层处理。136.2d图形引擎是2d绘图的绘图引擎。137.art主要负责将源代码转换为机器码。art还具有内存管理和垃圾回收等功能。138.art包括核心库和虚拟机。139.核心库主要用于提供基本的java类库,例如基础数据结构、数学、输入/输出(input/output,i/o)、工具、网络等库。核心库还为开发人员提供了系统api。140.虚拟机可以是dalvik虚拟机或者art虚拟机,其中,dalvik虚拟机采用即时(justintime,jit)编译策略将源代码转换为机器码,art虚拟机采用提前(aheadortime,aot)编译策略将源代码转换为机器码。141.应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件转换为二进制文件。虚拟机用于执行对象生命周期的管理、堆栈管理、线程管理、安全和异常的管理、以及垃圾回收等功能。142.硬件抽象层运行于用户空间(userspace),对内核层驱动进行封装,向上层提供调用接口。143.内核层是硬件和软件之间的层。内核层例如包含binder驱动、显示驱动、摄像头驱动、音频驱动和传感器驱动。144.binder驱动是一个特殊字符型设备,设备节点为/dev/binder,遵循linux设备驱动模型。在驱动实现过程中,主要通过binder_ioctl函数与用户空间的进程交换数据。145.可以理解的是,图1和图2所示的硬件结构和软件架构仅仅是对装置100的示例性介绍,不构成对装置100在硬件和软件上的限制,装置100还可以是由其他类型的硬件结构和软件架构。146.为方便理解本技术的技术方案,首先对本技术涉及的技术概念做简要介绍。147.在装置100的操作系统(也可以简称为“系统”)中,存在多个进程实现不同的功能,基于安全等方面的考虑,一个进程不能直接操作或访问另一个进程,即,不同进程间存在进程隔离。两个进程之间要进行数据交互就得采用特殊的通信机制:进程间通信(ipc)。148.ipc涉及到两个概念:用户空间(userspace)和内核空间(kernelspace)。149.现在操作系统都是采用的虚拟存储器,对于32位系统而言,它的寻址空间(虚拟存储空间)就是2的32次方,也就是4gb。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也可以访问底层硬件设备的权限。为了保护用户进程不能直接操作内核,保证内核的安全,操作系统从逻辑上将虚拟空间划分为用户空间(userspace)和内核空间(kernelspace)。针对linux操作系统而言,将最高的1gb字节供内核使用,称为内核空间;较低的3gb字节供各用户进程使用,称为用户空间。150.简单的说就是,内核空间是系统内核运行的空间,用户空间是用户进程运行的空间。为了保证安全性,它们之间是隔离的。151.虽然从逻辑上进行了用户空间和内核空间的划分,但不可避免的用户空间需要访问内核资源,比如文件操作、访问网络等等。为了突破隔离限制,就需要借助系统调用来实现。系统调用是用户空间访问内核空间的唯一方式,保证了所有的资源访问都是在内核的控制下进行的,避免了用户程序对系统资源的越权访问,提升了系统安全性和稳定性。152.linux使用两级保护机制:0级供系统内核使用,3级供用户程序使用。153.当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码的时候,称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。154.传统的ipc中,数据发送进程将要发送的数据存放在内存缓存区中,通过系统调用进入内核态。然后内核程序在内核空间分配内存,开辟一块内核缓存区,调用copy_from_user()函数将数据从用户空间的内存缓存区拷贝到内核空间的内核缓存区中。同样的,数据接收进程在接收数据时在自己的用户空间开辟一块内存缓存区,然后内核程序调用copy_to_user()函数将数据从内核缓存区拷贝到接收进程的内存缓存区。这样数据发送进程和数据接收进程就完成了一次数据传输,我们称完成了一次进程间通信。如图3所示。155.这种传统的ipc通信方式有两个问题:156.1、性能低下,一次数据传递需要经历:内存缓存区→内核缓存区→内存缓存区,需要2次数据拷贝。157.2、接收数据的缓存区由数据接收进程提供,但是数据接收进程并不知道需要多大的空间来存放将要传递过来的数据,因此只能开辟尽可能大的内存空间或者先调用api接收消息头来获取消息体的大小,这两种做法不是浪费空间就是浪费时间。158.binder是一种新型ipc,只需1次数据拷贝即可实现两个进程间的数据传递,下面检要介绍binder的通信机制。159.图4是binder机制的示意图。从结构上来说,binder包括服务端(server)、客户端(client)、服务管理器(servicemanager)和binder驱动。160.server和client是需要进行ipc的两个进程。servicemanager是系统中的守护进程,servicemanager启动后会通知binder驱动自己将作为系统的服务管理者,然后servicemanager进入一个循环,监听来自其他进程的请求。每个使用binder的进程都要在servicemanager中注册,在监听过程中,如果有请求,servicemanager就响应该请求,如果没有请求,servicemanager继续监听请求。161.server、client、servicemanager和binder驱动的作用如表1所示。162.表1[0163][0164]图4中,client使用server提供的服务通常需要以下三个步骤。[0165]s410,server通过binder驱动在servicemanager中注册服务。[0166]server在提供服务前需要通过binder驱动在servicemanager中注册服务。server可以创建一个binder对象(用于描述服务的参数集合),并为该binder对象起一个字符形式的名字(一个可读易记的名字,如“张三”),将这个binder对象连同名字一起以数据包的形式通过binder驱动发送给servicemanager,通知servicemanager注册一个名为“张三”的binder对象。binder驱动为这个穿越进程隔离的binder对象创建位于内核中的实体节点以及servicemanager对binder实体的引用,即,句柄(handle),随后,binder驱动将名字以及句柄打包传给servicemanager。servicemanger收到数据包后从中取出名字和句柄填入查找表,建立名字-句柄(name-handle)的关联关系,完成server的服务注册。[0167]查找表的作用是将字符形式的binder名字转化成binder句柄,使得client能够通过binder的名字找到binder实体。注册了名字的binder实体叫实名binder。[0168]s420,client通过binder驱动从servicemanager获取server的服务。[0169]server在servicemanager中注册了服务以后,client就能通过名字获得句柄,进而通过句柄访问server,获取server的服务。[0170]例如,client可以向servicemanager请求访问名字叫“张三”的服务,servicemanager收到这个请求消息后从请求消息中取出名字“张三”,在查找表里找到该名字对应的句柄,将该句柄作为回复发送给发起请求的client,以便于client基于该句柄访问server,获取server的服务。[0171]s430,client使用server提供的服务。[0172]client获取server的句柄后,能够通过该句柄实现与server的通信,使用server提供的服务。client使用server提供的服务时仍然需要以binder驱动为桥梁,即,实际的数据传输是通过binder驱动来完成的。[0173]上文介绍了client与server建立binder通信连接的方法,下面介绍binder通信连接建立之后,client与server的数据传输过程。[0174]binder驱动首先为跨进程通信做准备。[0175]binder驱动在内核空间创建一块接收缓冲区(即,为server分配一块缓冲区),接着建立接收缓冲区与client的内核缓冲区之间的映射关系,以及接收缓冲区与server的用户空间的映射关系,使得内核缓冲区与server的用户空间映射到同一个内存区域(接收缓冲区)。[0176]随后,client和server可以执行图5所示的方法。[0177]s510,client将数据写入内核缓冲区。[0178]client可以通过系统调用copy_from_user()将数据(如请求调用目标方法的binder请求)写入内核缓冲区。由于内核缓冲区与server的用户空间存在映射关系,数据写入内核缓冲区相当于写入了server的用户空间。[0179]随后,binder驱动通知server执行数据解包。server收到binder驱动的通知后,执行数据解包获取client的binder请求,随后,server可以根据binder请求调用目标方法执行后续处理。[0180]s520,server将处理结果写入自己的用户空间。[0181]由于server的用户空间与内核缓冲区存在映射关系,处理结果写入server的用户空间相当于写入了内核缓冲区。[0182]binder驱动通知client获取处理结果。[0183]s530,client从内核缓冲区获取处理结果。[0184]client可以通过系统调用copy_to_user()从内核缓冲区获取处理结果。[0185]由图5所示的数据传输过程可知,client或server需要binder驱动创建的接收缓冲区暂存数据,这块缓冲区可以称为binder缓冲(binder_buffer)。[0186]binder缓冲的大小有限,在一些实施例中,binder缓冲的大小为8k~1m。此外,binder缓冲还分为同步binder缓冲和异步binder缓冲,同步binder缓冲用于暂存同步binder调用的数据,异步binder缓冲用于暂存异步binder调用的数据。[0187]在异步binder调用机制下,client无需等待本次调用的结果即可再次调用server,因此,在一些情况下,例如,server处理异步binder调用出错的情况下,client等不到处理结果,在这种情况下,client会循环调用server的异步binder接口,导致server的异步binder缓冲资源耗尽,server后续无法再响应其他进程的调用请求。[0188]图6示出了一种异步binder调用的时序关系。[0189]s610,client向binder驱动发送bc_transaction命令,表示client准备向binder驱动发送数据。[0190]s620,binder驱动向client发送br_transaction_complete命令,表示bc_transaction命令发送成功。[0191]binder驱动收到bc_transaction命令后,为client分配binder缓冲,以便于client写入数据。[0192]s630,binder驱动向server发送br_transaction命令,指示server读取binder缓冲中的数据。[0193]server读取binder缓冲中的数据后,执行下列步骤。[0194]s640,server向binder驱动发送bc_free_buffer命令,指示binder驱动释放分配给client的binder缓冲。[0195]由此可见,client发送数据后无需等待server的执行结果,因此,若client在短时间内发送多次bc_transaction命令,则binder驱动会为client分配大量binder缓冲。[0196]对于server来说,binder缓冲是有限的。例如,server的异步binder缓冲通常只有508k,如果client一直调用server的异步binder接口发送binder请求,每发送一次binder请求binder驱动就需要为client分配一次binder缓冲,server的异步binder缓冲资源会很快被消耗殆尽。此时,若有其他进程与server通信,则会出现无异步binder缓冲资源可用的情况,server无法再响应其他进程的请求。当server为系统进程(如,系统服务进程或者媒体服务进程)时,就会出现用户界面不再响应用户的操作的情况,即,出现“冻屏”现象。[0197]下面介绍本技术提供的一种处理异步binder调用的方法,该方法能够避免避免冻屏现象出现。[0198]如图7所示,该方法包括以下内容。[0199]s710,检测系统进程的异步binder缓冲的占用空间。[0200]终端设备可以通过binder驱动检测系统进程的异步binder缓冲的占用空间。[0201]系统进程是指:当进程的异步binder缓冲资源消耗殆尽时会导致用户界面不再响应用户的操作的进程。[0202]占用空间指的是:分配给获取和使用系统进程的服务的进程的异步binder缓冲。[0203]例如,相机app请求获取系统进程的服务,则binder驱动可以从系统进程的异步binder缓冲资源中为相机app分配大小为a的异步binder缓冲;图库app正在使用系统进程的服务,则图库app也被分配了大小为b的异步binder缓冲;若当前只有相机app和图库app与系统进程之间进行异步binder通信,则系统进程的异步binder缓冲的占用空间为a+b,其中,a可以等于b,也可以不等于b。[0204]s720,确定占用空间是否大于或等于门限值。[0205]当占用空间小于门限值时,终端设备继续检测系统进程的异步binder缓冲的占用空间,其中,终端设备可以周期性地检测系统进程的异步binder缓冲的占用空间。当所述占用空间大于或等于门限值时,终端设备可以执行s730。[0206]s730,从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,所述m和所述n为正整数,所述m大于或等于所述n。[0207]例如,当系统进程的异步binder缓冲为508k时,可以将门限值设置为450k;当占用空间大于或等于450k时,终端设备即可从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,其中,终端设备可以通过binder驱动从服务管理器获取记录调用系统进程的异步binder接口的进程标识(identifier,id)的调用链,从调用链记录的m个进程中确定n个目标进程。[0208]此外,上述n个进程可以是第三方应用进程,也可以是非第三方应用进程(如,另外一个系统进程),第三方应用进程例如是图2中应用程序层中的app的进程。[0209]下面介绍两个确定n个目标进程的实施例。[0210]实施例一。[0211]可选地,终端设备从直接调用系统进程的异步binder接口的p个进程中确定第一进程,第一进程为p个进程中调用异步binder接口的次数最多的进程,p为小于或等于所述m的正整数;随后,基于第一进程的类型,终端设备可以采用以下两种方式中的一个。[0212]方式一:[0213]当第一进程为第三方应用进程时,确定第一进程为n个目标进程中的一个。[0214]方式二:[0215]当所述第一进程为非第三方应用进程时,从通过第一进程调用异步binder接口的q个进程中确定第二进程,第二进程为所述q个进程中调用异步binder接口的次数最多的进程,q为小于或等于所述m的正整数;当第二进程为第三方应用进程时,确定第二进程为n个目标进程中的一个。[0216]例如,直接调用系统进程的异步binder接口的p个进程分别为p1、p2、…、pp,其中,p1调用系统进程的异步binder接口的次数最多,则第一进程为p1。随后,终端设备可以确定p1的类型。[0217]若p1为第三方应用进程,则终端设备可以直接确定p1为n个目标进程中的一个。若n等于1,则s730结束;若n大于1,例如n=2,则终端设备可以继续从p个进程中确定调用异步binder接口的次数次多的进程,如p2,当p2为第三方应用进程时,s730结束;当p2为非第三方应用进程时,终端设备可以从通过p2调用异步binder接口的进程中确定调用次数最多的第三方应用进程,如果没有其他进程通过p2调用异步binder接口,则终端设备可以从p3、…、pp中确定调用异步binder接口的次数最多的第三方应用进程作为n个目标进程中的一个。[0218]若p1为非第三方应用进程,则终端设备可以确定通过p1调用异步binder接口的q个进程,该q个进程分别为q1、q2、…、qq,若q1调用异步binder接口的次数最多,并且q1为第三方应用进程,则确定q1为n个目标进程中的一个。若q1为非第三方应用进程,则继续从通过q1调用系统进程的异步binder接口的进程中确定一个调用次数最多的第三方应用进程作为n个目标进程中的一个。若n等于1,则s730至此结束;若n大于1,例如n=2,则终端设备可以继续从q个进程中确定调用异步binder接口的次数次多的进程。[0219]例如,q个进程中调用异步binder接口的次数次多的进程q2,当q2为第三方应用进程时,s730结束;当q2为非第三方应用进程时,终端设备可以从通过q2调用异步binder接口的进程中确定调用次数最多的第三方应用进程作为n个目标进程中的一个;如果没有其他进程通过q2调用异步binder接口,则终端设备可以从q3、…、qq中确定调用异步binder接口的次数最多的第三方应用进程作为n个目标进程中的一个。[0220]造成冻屏现象的主要原因是第三方应用开发时未做好适配导致系统进程处理异步binder接口调用时出错,因此,当第一进程为调用异步binder接口的次数最多的第三方应用进程时,第一进程是最有可能导致冻屏的进程,将第一进程作为目标进程,释放分配给第一进程的binder缓冲,能够有效避免冻屏出现。[0221]当第一进程不是第三方应用进程时,第一进程导致冻屏的可能性不大,可以从通过第一进程调用系统进程的q个进程中确定第二进程,即,从q个进程中确定调用所述异步binder接口的次数最多的进程,释放分配给第二进程的binder缓冲,能够有效避免冻屏出现。[0222]实施例二。[0223]可选地,终端设备还可以通过下列方法确定n个目标进程。[0224]确定k个进程,所述k个进程为所述系统进程的异步binder接口的调用链的源头进程,所述k为正整数;[0225]从所述k个进程中确定所述m个进程,所述m个进程为第三方应用进程;[0226]从所述m个进程中确定调用所述异步binder接口的次数最多的n个进程为所述n个目标进程。[0227]例如,当前有3个进程调用系统进程的异步binder接口,分别为a1、a2和a3,有两个进程(a11和a12)通过a1调用系统进程的异步binder接口,没有其他进程通过a2和a3调用系统进程的异步binder接口,则a1不是系统进程的异步binder接口的调用链的源头进程,a11、a12、a2和a3是系统进程的异步binder接口的调用链的源头进程。[0228]终端设备可以从a11、a12、a2和a3这4个进程中确定m个第三方应用进程,其中,a11和a12是间接调用系统进程的异步binder接口的进程,a2和a3是直接调用系统进程的异步binder接口的进程。当a11、a12和a3是第三方应用进程,并且a2是非第三方应用进程(如a2是另外一个系统进程)时,则m个进程为a11、a12和a3。当n=2时,并且,当a11和a12是调用异步binder接口次数最多的两个进程时,则n个目标进程为a11和a12。[0229]在本实施例中,终端设备在确定系统进程的异步binder接口的调用链的源头后再确定目标进程,相比于实施例一,实施例二可以准确确定调用异步binder接口的次数最多的n个进程,从而可以有效避免冻屏出现。[0230]可选地,在实施例一和实施例二中,当m个进程包括调用异步binder接口的次数相同的h个进程时,并且,当h个进程调用异步binder接口的次数是m个进程中最多的进程时,从h个进程中确定n个调用异步binder接口的时间最早的进程为n个目标进程,h为大于n的正整数。[0231]当h个进程调用系统进程的异步binder接口的次数相同时,并且,当h个进程是调用异步binder接口的次数是m个进程中最多的进程时,终端设备可以根据h个进程的调用时间确定n个目标进程,调用时间最早的进程大概率是发生调用失败的进程,将调用时间最早的n个进程确定为目标进程可以准确排除导致冻屏现象的隐患。[0232]以实施例二为例,m个进程为a11、a12和a3。当n=1时,终端设备需要从a11、a12和a3中确定1个目标进程,当a11和a12是调用异步binder接口次数最多的两个进程时,并且,当a11和a12调用异步binder接口次数相同时,a11和a12即为上述h个进程,终端设备可以确定a11和a12调用异步binder接口的最早时间,若a11首次调用异步binder接口的时间早于a12首次调用异步binder接口的时间,则终端设备确定a11为n个目标进程。[0233]确定n个目标进程后,终端设备可以通过binder驱动执行下列步骤,[0234]s740,释放分配给所述n个目标进程的异步binder缓冲。[0235]将分配给n个目标进程的异步binder缓冲释放后,系统进程就有了更多的异步binder缓冲资源,从而可以响应其他进程的异步binder调用,避免系统进程的异步binder缓冲资源耗尽导致的冻屏现象。[0236]可选地,上述n等于1。[0237]当n等于1时,终端设备执行的方案是逐个释放目标进程占用的异步binder缓冲,这样可以避免一次释放多个目标进程占用的异步binder缓冲导致正常业务受到影响。[0238]可选地,图8示出了本技术提供的另一种处理异步binder调用的方法,与图7所示的方法相比,图8所示的方法还包括:[0239]s750,关闭所述n个目标进程。[0240]关闭目标进程可以避免目标进程再次调用系统进程的异步binder接口,彻底消除导致冻屏现象的隐患。[0241]可选地,图7或图8所示的方法还包括:[0242]在所述n个目标进程的异步binder缓冲释放之后,再次检测系统进程的异步binder缓冲的占用空间;[0243]当所述再次检测的检测结果大于或等于所述门限值时,从所述m个进程中剩余的进程中确定l个目标进程,所述l为正整数;[0244]释放分配给所述l个目标进程的异步binder缓冲。[0245]如果n个目标进程的异步binder缓冲释放之后,系统进程的异步binder缓冲的占用空间仍然大于或等于门限值,说明仍然有进程在循环调用系统进程的异步binder接口,终端设备可以再次从剩余的进程中确定l个目标进程,释放分配给l个目标进程的异步binder缓冲,避免冻屏现象的出现。[0246]以上文所述实施例二为例,m个进程为a11、a12和a3。终端设备确定的n个目标进程为a11。a11的异步binder缓冲释放之后,系统进程的异步binder缓冲的占用空间仍然大于或等于门限值,则终端设备可以从a12和a3中确定l个目标进程。当l等于1时,并且,当a12调用异步binder接口的次数大于a3调用异步binder接口的次数时,终端设备可以确定a12为l个目标进程,随后释放分配给a12的异步binder缓冲。可选地,终端设备还可以关闭a12,彻底消除导致冻屏现象的隐患。[0247]释放分配给a12的异步binder缓冲之后,终端设备可以继续检测系统进程的异步binder缓冲的占用空间,若占用空间仍然大于或等于门限值,终端设备可以继续从剩余的进程中确定目标进程,释放分配给目标进程的异步binder缓冲,直至系统进程的异步binder缓冲的占用空间小于门限值。随后,终端设备继续监测系统进程的异步binder缓冲的占用空间。[0248]下面再介绍两个本技术提供的处理异步binder调用的方法。[0249]图9示出了一种直接调用异步binder调用接口时处理异步binder调用的方法。[0250]s901,相机app进程调用systemserver进程的异步binder接口。[0251]上述相机app可以是第三方开发的美颜相机app。[0252]s902,systemserver进程为相机app进程分配异步binder缓冲。[0253]systemserver进程可以调用binder驱动的函数(如binder_alloc_buf)为相机app分配异步binder缓冲。[0254]在一些情况中,相机app进程调用systemserver进程的异步binder接口时传入的参数规格不符合系统的要求,从而导致调用异步binder接口失败,相机app进程会反复调用systemserver进程的异步binder接口,即,相机app进程和systemserver进程执行s903。[0255]s903,相机app进程多次调用systemserver进程的异步binder接口,systemserver进程多次为相机app进程分配异步binder缓冲。[0256]s904,systemserver进程确定异步binder缓冲的占用空间达到或超过门限值。[0257]systemserver进程可以定期向binder驱动查询异步binder缓冲的占用空间是否达到或超过门限值。[0258]s905,systemserver进程确定调用异步binder接口次数最多的第三方应用进程为相机app进程。[0259]systemserver进程向servicemanager查询异步binder接口的调用链,servicemanager可以按照图10所示的方法确定调用异步binder接口次数最多的第三方应用进程。[0260]图10示出了确定调用异步binder接口次数最多的第三方应用进程的方法。[0261]s1010,servicemanager获取systemserver进程的异步binder接口的调用进程的调用链。[0262]servicemanager可以遍历binder_transaction结构体,从中选出标记(flag)为异步binder标记(如,1)的binder接口调用记录,从而获取了systemserver进程的异步binder接口的调用进程的调用链。[0263]servicemanager也可以遍历binder_transaction日志,从中选出带有异步binder标记(如,async)的binder接口调用记录,从而获取了systemserver进程的异步binder接口的调用进程的调用链。[0264]s1020,servicemanager从调用链记录的多个调用进程中确定调用异步binder接口次数最多的进程。[0265]servicemanager可以先确定调用链的全部源头进程,再执行s1020;servicemanager也可以先确定直接调用systemserver进程的异步binder接口次数最多的进程,即,直接执行s1020。[0266]s1030,servicemanager确定该进程的pid是否大于10000。[0267]第三方应用进程的pid通常是大于10000的数值,若该进程的pid为大于10000的数值,则servicemanager执行s1040;若该进程的pid为小于或等于10000的数值,则servicemanager执行s1050。[0268]若第三方应用进程的pid存在其他预定义的规则,servicemanager也可以根据该预定义的规则判断进程是否属于第三方应用进程。[0269]s1040,servicemanager确定该进程为调用异步binder接口的次数最多的第三方应用进程。[0270]s1050,servicemanager从调用链中剩余的调用进程中确定调用异步binder接口次数最多的进程,并返回执行s1030,确定当前的进程的pid是否大于10000。[0271]servicemanager确定调用异步binder接口次数最多的第三方应用进程为相机app进程之后,向systemserver进程返回相机app进程的进程标识(processidentificaiton,pid)。[0272]回到图9,systemserver进程收到servicemanager返回的pid(如,相机app进程的pid)后执行下列步骤。[0273]s906,systemserver进程向相机app进程发送进程终结(kill)信号。[0274]s907,systemserver进程通过binder驱动释放分配给相机app进程的异步binder缓冲。[0275]s906和s907的执行顺序不分先后,即,systemserver进程可以先执行s906再执行s907,也可以先执行s907再执行s906,还可以同时执行s906和s907。[0276]图11示出了一种间接调用异步binder调用接口时处理异步binder调用的方法。[0277]s1101,游戏app进程调用mediaserver进程的mediaplayer接口。[0278]s1102,mediaserver进程调用systemserver进程的异步binder接口。[0279]s1103,systemserver进程为mediaserver进程分配异步binder缓冲。[0280]在一些情况中,游戏app进程调用mediaserver进程的mediaplayer接口时传入的参数规格不符合系统的要求,会导致mediaserver进程调用systemserver进程的异步binder接口失败。[0281]例如,游戏app进程调用mediaserver进程的mediaplayer接口请求播放视频,但是游戏app进程请求播放的视频的分辨率很高,系统编码器不支持,则mediaserver进程调用systemserver进程的异步binder接口传入的参数规格不符合系统的要求,从而导致调用异步binder接口失败,游戏app进程会反复调用mediaserver进程的mediaplayer接口,导致mediaserver进程反复调用systemserver进程的异步binder接口,即,游戏app进程、mediaserver进程和systemserver进程执行s1104。[0282]s1104,游戏app进程多次调用mediaserver进程的mediaplayer接口,mediaserver进程多次调用systemserver进程的异步binder接口,systemserver进程多次为mediaserver进程分配异步binder缓冲。[0283]s1105,systemserver进程确定异步binder缓冲的占用空间达到或超过门限值。[0284]systemserver进程可以定期向binder驱动查询异步binder缓冲的占用空间是否达到或超过门限值。[0285]s1106,systemserver进程确定调用异步binder接口次数最多的进程为mediaserver进程。[0286]systemserver进程向servicemanager查询异步binder接口的调用链,servicemanager可以遍历binder_transaction结构体或者binder_transaction日志确定调用异步binder接口次数最多的进程。[0287]由于调用异步binder接口次数最多的进程为非第三方应用进程,systemserver进程可以执行s1107。[0288]s1107,systemserver进程指示mediaserver进程反向查找调用链。[0289]s1108,mediaserver进程确定调用异步binder接口次数最多的第三方应用进程为游戏app进程。[0290]mediaserver进程可以查找那些间接调用systemserver进程的异步binder接口的进程,并确定调用异步binder接口次数最多的第三方应用进程为游戏app进程。[0291]s1109,mediaserver进程向systemserver进程返回游戏app进程的pid。[0292]s1110,systemserver进程向游戏app进程发送进程终结(kill)信号。[0293]s1111,systemserver进程通过binder驱动释放分配给相机app进程的异步binder缓冲。[0294]s1110和s1111的执行顺序不分先后,即,systemserver进程可以先执行s1110再执行s1111,也可以先执行s1111再执行s1110,还可以同时执行s1110和s1111。[0295]上文详细介绍了本技术提供的处理异步binder调用的方法的示例。可以理解的是,相应的装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。[0296]本技术可以根据上述方法示例对处理异步binder调用的装置进行功能单元的划分,例如,可以将各个功能划分为各个功能单元,也可以将两个或两个以上的功能集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本技术中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。[0297]图12是本技术提供的一种处理异步binder调用的装置的结构示意图。该装置1200包括检测单元1210和处理单元1220。[0298]可选地,检测单元1210和处理单元1220是处理器110的功能模块,处理器110可以执行内部存储器121中存储的计算机程序代码(如图7~图11所示的方法的代码)实现检测单元1210和处理单元1220的下列功能。[0299]检测单元1210用于:检测系统进程的异步binder缓冲的占用空间;[0300]处理单元1220用于:当所述占用空间大于或等于门限值时,从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,所述m和所述n为正整数,所述m大于或等于所述n;[0301]释放分配给所述n个目标进程的异步binder缓冲。[0302]可选地,上述处理单元1220具体用于执行:[0303]从直接调用所述异步binder接口的p个进程中确定第一进程,所述第一进程为所述p个进程中调用所述异步binder接口的次数最多的进程,所述p为小于或等于所述m的正整数;[0304]当所述第一进程为第三方应用进程时,确定所述第一进程为所述n个目标进程中的一个。[0305]可选地,上述处理单元1220具体用于执行:[0306]当所述第一进程为非第三方应用进程时,从通过所述第一进程调用所述异步binder接口的q个进程中确定第二进程,所述第二进程为所述q个进程中调用所述异步binder接口的次数最多的进程,所述q为小于或等于所述m的正整数;[0307]当所述第二进程为第三方应用进程时,确定所述第二进程为所述n个目标进程中的一个。[0308]可选地,上述处理单元1220具体还用于,在从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程之前,执行:[0309]确定k个进程,所述k个进程为所述系统进程的异步binder接口的调用链的源头进程,所述k为正整数;[0310]从所述k个进程中确定所述m个进程,所述m个进程为第三方应用进程;[0311]所述从调用所述系统进程的异步binder接口的m个进程中确定n个目标进程,包括:[0312]从所述m个进程中确定调用所述异步binder接口的次数最多的n个进程为所述n个目标进程。[0313]可选地,上述处理单元1220具体用于执行:[0314]当所述m个进程包括调用所述异步binder接口的次数相同的h个进程时,并且,当所述h个进程调用所述异步binder接口的次数是所述m个进程中最多的进程时,从所述h个进程中确定n个调用所述异步binder接口的时间最早的进程为所述n个目标进程,所述h为大于所述n的正整数。[0315]可选地,上述处理单元1220还用于执行:[0316]在所述n个目标进程的异步binder缓冲释放之后,再次检测系统进程的异步binder缓冲的占用空间;[0317]当所述再次检测的检测结果大于或等于所述门限值时,从所述m个进程中剩余的进程中确定l个目标进程,所述l为正整数;[0318]释放分配给所述l个目标进程的异步binder缓冲。[0319]可选地,所述n等于1。[0320]可选地,上述处理单元1220还用于执行:[0321]关闭所述n个目标进程。[0322]可选地,所述系统进程为系统服务进程。[0323]装置1200执行处理异步binder调用的方法的具体方式以及产生的有益效果可以参见方法实施例中的相关描述。[0324]本技术还提供了一种计算机程序产品,该计算机程序产品被处理器执行时实现本技术中任一方法实施例所述的方法。[0325]该计算机程序产品可以存储在存储器中,经过预处理、编译、汇编和链接等处理过程最终被转换为能够被处理器执行的可执行目标文件。[0326]该计算机程序产品也可以固化在芯片中的代码。本技术对计算机程序产品的具体形式不做限定。[0327]本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被计算机执行时实现本技术中任一方法实施例所述的方法。该计算机程序可以是高级语言程序,也可以是可执行目标程序。[0328]该计算机可读存储介质可以是易失性存储器或非易失性存储器,或者,可以同时包括易失性存储器和非易失性存储器。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。[0329]本领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和设备的具体工作过程以及产生的技术效果,可以参考前述方法实施例中对应的过程和技术效果,在此不再赘述。[0330]在本技术所提供的几个实施例中,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例的一些特征可以忽略,或不执行。以上所描述的装置实施例仅仅是示意性的,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统。另外,各单元之间的耦合或各个组件之间的耦合可以是直接耦合,也可以是间接耦合,上述耦合包括电的、机械的或其它形式的连接。[0331]应理解,在本技术的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术的实施例的实施过程构成任何限定。[0332]另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。[0333]总之,以上所述仅为本技术技术方案的较佳实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1