CN106055348A - 一种通知***属性更新的方法和装置 - Google Patents
一种通知***属性更新的方法和装置 Download PDFInfo
- Publication number
- CN106055348A CN106055348A CN201610340139.XA CN201610340139A CN106055348A CN 106055348 A CN106055348 A CN 106055348A CN 201610340139 A CN201610340139 A CN 201610340139A CN 106055348 A CN106055348 A CN 106055348A
- Authority
- CN
- China
- Prior art keywords
- attribute
- property
- audiomonitor
- system property
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 226
- 230000008569 process Effects 0.000 claims abstract description 186
- 238000004891 communication Methods 0.000 claims abstract description 80
- 238000012544 monitoring process Methods 0.000 claims abstract description 36
- 230000000977 initiatory effect Effects 0.000 claims description 5
- 230000007246 mechanism Effects 0.000 abstract description 17
- 238000011161 development Methods 0.000 abstract description 2
- 230000008859 change Effects 0.000 description 17
- 239000011230 binding agent Substances 0.000 description 13
- 230000006870 function Effects 0.000 description 10
- 238000005538 encapsulation Methods 0.000 description 7
- VJTAZCKMHINUKO-UHFFFAOYSA-M chloro(2-methoxyethyl)mercury Chemical group [Cl-].COCC[Hg+] VJTAZCKMHINUKO-UHFFFAOYSA-M 0.000 description 5
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000033772 system development Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000012356 Product development Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 229910052799 carbon Inorganic materials 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012806 monitoring device Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000001568 sexual effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种通知***属性更新的方法和装置,涉及软件开发技术领域,能够解决***属性的通知机制通知的目标不明确及无法通知的问题。其方法为:在用户级程序启动时,创建通信单元,用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,包括进程对应的***和监听的属性列表;启动属***,并循环等待通信单元发送的通知消息,包括更新的***属性及更新后的值;当***属性更新时,调用用户级程序的进程,通过通信单元向属***发送通知消息;遍历注册到属***中的每个***和每个***监听的属性列表,确定监听***属性的***;将通知消息通知给***对应的进程。本发明实施例用于Android***设备的开发和调试。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及一种通知***属性更新的方法和装置。
背景技术
随着安卓(Android)产品的普及和客制化的持续深入,其产品开发过程中越来越多的用到***属性(System Properties)机制,该机制可以快捷地记录变量到内存或存储中,读取和写入调用简单,广泛用于状态标志和跨进程的通信等,提升了***的开发效率。
目前的机制中,对***任一属性值的变化进行通知时,并不知道哪些进程对该属性变化感兴趣,因此,会通知到通过属性值的修改进程能获取到的所有实现了Binder通信机制的其它进程,包括对该属性感兴趣的进程和不感兴趣的进程,而且在对***任一属性值的变化进行通知时,只是通知了***属性发生了变化,当进程接收到该通知时,并不知道具体是哪个***属性发生了变化,该进程会将进程关注的所有***属性的值都重新获取一遍,从而实现数据同步的目的。此外,任一属性值发生变化,都需要在代码中主动调用接口进行属性变化的通知,但是若通过串口或adb工具包输入setprop命令以改变属性值时无法通过Binder通信机制通知给其它关联的进程,使得对该属性变化感兴趣的进程无法得到通知,进而无法保证调试的实时性。为了弥补该缺陷,进程中建立有一个线程,会每隔固定的时间查询一次该进程感兴趣的***属性的值,即采用轮询的方式获取***属性的实时性。
因此,目前的机制中,当***属性值发生变化时,其通知机制所通知的目标并不明确,或者出现无法通知需要以轮询的方式获取***属性值的情况,这将影响代码逻辑和***的运行效率。
发明内容
本发明实施例提供一种通知***属性更新的方法和装置,能够解决***属性的通知机制通知的目标不明确及无法通知的问题。
第一方面,提供一种通知***属性更新的方法,包括:
在用户级程序启动时,创建一通信单元,所述通信单元用于与属***进行进程间通信,所述属***用于接收进程启动后的注册消息,所述注册消息包括所述进程对应的***和所述***监听的属性列表;
启动所述属***,并循环等待通过所述通信单元发送的通知消息,所述通知消息包括更新的***属性及所述***属性更新后的值;
当获知所述***属性更新时,通过所述通信单元向所述属***发送所述通知消息;
遍历注册到所述属***中的每个***和所述每个***监听的属性列表,确定监听所述***属性的***;
将所述通知消息通知给监听所述***属性的***对应的进程。
第二方面,提供一种通知***属性更新的装置,包括:
启动单元,用于启动用户级程序;
创建单元,用于创建一通信单元,所述通信单元用于与属***进行进程间通信,所述属***用于接收进程启动后的注册消息,所述注册消息包括所述进程对应的***和所述***监听的属性列表;
所述启动单元还用于,启动所述属***,并循环等待所述通信单元发送的通知消息,所述通知消息包括更新的***属性及所述***属性更新后的值;
控制单元,用于当获知所述***属性更新时,通过所述通信单元向所述属***发送所述通知消息;
遍历单元,用于遍历注册到所述属***中的每个***和所述每个***监听的属性列表;
确定单元,用于确定监听所述***属性的***;
通知单元,用于将所述通知消息通知给监听所述***属性的***对应的进程。
本发明实施例提供一种通知***属性更新的方法和装置,在用户级程序启动时,创建一通信单元,通信单元用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,注册消息包括进程对应的***和***监听的属性列表;启动属***,并循环等待通过通信单元发送的通知消息,通知消息包括更新的***属性及***属性更新后的值;当获知***属性更新时,通过通信单元向属***发送通知消息;遍历注册到属***中的每个***和每个***监听的属性列表,确定监听***属性的***;将通知消息通知给监听***属性的***对应的进程。这样,由于进程设有对应的***和***监听的属性列表,即进程感兴趣的属性的列表,并注册在属***中,对于现有技术中***属性更新通知不明确的问题,本申请可使得在某一***属性更新时,通过用户级程序创建的通信单元向属***发送通知,以通知属***更新的***属性以及更新后的值,而后通过遍历属***中的***以及***监听的属性列表确定监听该***属性的***,以便将通知消息通知给该***属性的***对应的进程,使得通知目标明确,不需要像现有技术中的进程在获知***属性变化时还需重新获取一遍进程所关注的***属性;对于现有技术中如果通过串口或adb工具包更新***属性的值时由于受制于Binder进程间通信,无法进行***属性更新的通知的问题,本申请中在***属性更新时,可调用到用户级程序中,以便控制用户级程序与属***进行通信,进而将更新的***属性通知到注册到属***中对***属性感兴趣的进程,不受制于Binder进程间通信。因此,本发明可解决***属性的通知机制通知的目标不明确及无法通知的问题,进而提升了***开发和调试过程的执行效率,保证了***的稳定性和信息的实时性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种设备的结构示意图;
图2为本发明实施例提供的一种通知***属性更新的方法的流程示意图;
图3为本发明实施例提供的一种实现自动控制动态背光/MEMC功能过程中通知***属性更新的流程图;
图4为本发明实施例提供的一种通知***属性更新的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对目前的Android设备上对于***属性更新的通知机制的缺陷,需要在本发明执行的流程之前,运用程序设计语言建立用于本发明的接口和对该接口的编译封装,包括用于监听***属性更新的接口即***(Property Observer),以及对该接口的封装,***用于监测进程所关注的***属性的变化;用于接收***注册和注销***的属***(Property Service)的接口以及对该接口的封装。***中启动运行的任一个进程可以对应至少一个***,一个***可以监听该进程所关注的至少一个***属性。当任一进程调用设置***属性的函数更新***属性时,利用本发明建立的***和属***,可实现将该***属性的更新跨进程通知到对该***属性感兴趣的其它进程。
对于***的建立和封装来说,aidl(android interface definitionlanguage)为进程通信接口的描述,可运用程序设计语言建立一个用于跨进程通信的IPropertyObserver.aidl文件,约定一个接口为oneway void onChange(in Stringproperty,int userld),用于监听的***属性(property)发生改变时,Property Service回调该接口通知给其它关注该***属性的进程。而后,对该IPropertyObserver.aidl文件进行编译,生成IPropertyObserver.stub,为存根抽像类,可在应用进程(ProcessApplication)中使用。而后,对IPropertyObserver.stub进行封装生成java代码,记为PropertyObserver.java,提供了对于***内属性变化的监听,即对***的封装,为一个抽象类。PropertyObserver.java封装了上述IPropertyObserver.stub的具体类Transport,将IPropertyObserver.stub作为PropertyObserver.java的内部类,用于与过程***服务(process system server)进程中的IPropertyObserver.proxy进行通信。Transport继承了IPropertyObserver.stub,作为Binder通信的server端,其构造方法中传入有Property Observer的实例,并复写了上述onChange的方法,即调用接口通知其他进程***属性的方法。当一进程启动运行后,Process Application可以将该进程对应的PropertyObserver通过Android Binder机制注册到Property Service中,但是实际上是将property Observer中的Transport以IPropertyObserver.proxy的形式注册到了PropertyService中。当***属性更新时,Property Service通过IPropertyObserver.proxy将***属性更新的事件通知到Process Application中的IPropertyObserver.stub(Transport),IPropertyObserver.stub(Transport)再通知到PropertyObserver.java,由PropertyObserver.java继续通知到PropertyObserver.java对应的进程中。
此外,该PropertyObserver.java也提供了注销Property Observer的方法,例如当一进程停止运行时,进程对应的Property Observer也会被注销。PropertyObserver.java还包括一些可以提供给使用Property Observer的使用者可以调用的方法接口,例如1)addWatchingProperty(String property),用于提供给用户调用,以对Property Observer添加其所关注的***属性;2)getWatchingProperties(),用于获取Property Observer关注的所有的***属性;3)getPropertyObserver(),用于向调用该接口的进程返回一个Iproperty Observer(Transport)类型的对象,即Iproperty Observer的实例;4)releasePropertyObserver(),用于销毁3)中的对象。
对于Property Service的接口以及封装来说,可以建立一个用于跨进程通信的IPropertyService.aidl文件,约定两个接口:1)void unregisterProperty Observer(IpropertyObserver observer),用于在Property Service中注销***;2)voidregisterPropertyObserver(in ArrayList<String>)properties,IpropertyObserverobserver,int userHandle),用于在Property Service中注册***,properties为***需要监听的属性列表。而后,建立PropertyService.java,提供了对于属***的封装,其中定义了Property Service继承自IPropertyService.stub,作为Binder通信的server端,所有的Property Observer均注册到该server中,当***属性发生变化时,PropertyService会对注册到Property Service中的Property Observer进行遍历通知,以便在Property Observer所监听的属性列表中存在该变化的***属性时,将该通知告知给Property Observer对应的其它进程。其中,当Property Observer注册到PropertyService中后,可以将Property Service加入到用于记录各个Property Service的列表记录中,并记录Property Service所监听的properties。当需要注销Property Observer时,Property Service从列表记录中删除该Property Observer,并删除Property Observer所监听的properties。
应用上述对于Binder通信的两个server端:Property Observer和PropertyService的建立和封装,为了解决***属性的通知机制通知的目标不明确及无法通知的问题,本发明实施例提供一种通知***属性更新的方法,该方法可以应用于具有Android***的设备,该设备的硬件结构图可以如图1所示,包括处理器101、存储器102、用户接口103、网络接口104以及通信总线105。本领域或普通技术人员可以理解,图1所示的结构仅为示意,其并不对设备的结构造成限定,或者具有与图1所示不同的配置。通信总线105用于设备中各组成部件之间的通信,用户接口103用于插接外部设备,例如电脑、鼠标及键盘等,以接收用户输入的信息;网络接口104用于与外部进行互相通信,存储器102可用于存储软件程序及模块,数据库,如本发明实施例中通知***属性更新的方法及装置对应的程序指令/模块。处理器101通过运行存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,例如,处理器101通过调用存储器102中的通知***属性更新的方法的应用程序,以解决***属性的通知机制通知的目标不明确及无法通知的问题。
如图2所示,该方法可以包括:
201、设备在用户级程序启动时,创建通信单元,通信单元用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,注册消息包括进程对应的***和***监听的属性列表。
本发明实施例中的方法可用于对Android***的设备的开发和调试过程,在该过程中可能需要对***某些属性进行设置或更改,当***启动时,其用户级程序(initialization,init)首先启动,当init启动时,可创建一通信单元,用于与PropertyService进行进程间通信,该Property Service用于接收进程启动后的注册消息,该注册消息包括进程对应的PropertyObserver和Property Observer监听的属性列表(properties)。
其中,通信单元可以为消息队列、或共享内存、或管道等,本申请不做限定。消息队列为一个消息的链表,可以把消息看作一个记录,提供了一种从一个进程向另一个进程发送数据块的方法。共享内存为允许两个不相关的进程访问同一个逻辑内存,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。管道是单向的、先进先出的,用于将一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)可以在管道的头部读出数据。
步骤101过程的程序代码可以为:
202、设备启动属***,并循环等待通过通信单元发送的通知消息,通知消息包括更新的***属性及***属性更新后的值。
若上述通信单元为消息队列,则当***启动时,Android***中需要为应用程序创建进程的Zygote也启动,上述process system server进程就会启动,由于process systemserver进程包括Property Service,因此,当Zygote启动后,会将Property Service启动。当Property Service启动时,Property Service可以通过Java本地调用(Java NativeInterface,JNI)的方式初始化本地(native)层的属性更新对象(PropertyChanger),用于通过消息队列接收init进程发送的***属性更新的通知消息,相当于创建一个消息队列的接收端,通知消息包括更新的***属性及***属性更新后的值。PropertyChanger用于支持关联属性事件的触发。
203、当设备获知***属性更新时,调用用户级程序的进程,通过通信单元向属***发送通知消息。
当需要更新某一***属性时,需要在进程中设置实现,当任一进程调用设置属性的函数时,设备便获知***属性需要更新,可以将设置属性的函数调用到用户级程序即init的进程中;而后确定设置属性的函数中***属性将要更新后的值与当前***属性的值是否相同,若不同,则更新***属性的值,并通过init进程将***属性及***属性更新后的值写入消息队列中,通过PropertyChanger接收消息队列发送的通知消息,并在接收到后向Property Service发送通知消息。
具体地,当任一进程调用设置属性的函数即property_set方法时,设备便获知***属性需要更新,可以通过Socket机制调用到init进程中的property_set方法中进行设置。此时可以在property_set方法中增加property_get的步骤,用以先获取当前的***属性及未更新之前的值,并与该***属性待更新后的值进行对比,如果不同,则继续执行property_set方法的逻辑,如果相同,则直接return,不需要继续执行。这样可以提高***的执行效率,避免了不必要的代码逻辑的运行,步骤103对应的程序代码可以为:
当确定继续执行property_set方法的逻辑时,通过init进程可以将更新的***属性及更新后的值传入消息队列中,通过init进程创建的消息队列向PropertyChanger发送通知消息,使得PropertyChanger再将通知消息发送给Property Service,通知消息中包括更新的***属性以及更新后的值。
204、设备遍历注册到属***中的每个***和每个***监听的属性列表,确定监听***属性的***。
当Property Service接收到通知消息后,可以通过JNI回调Property Service中私有的notifychange方法,用以通知对更新的***属性感兴趣的其它进程。具体的,可以通过notifychange方法遍历注册到Property Service中的每个Property Observer以及每个Property Observer监听的properties,确定Property Observer监听的properties中是否包括更新的***属性,以确定出监听该***属性的Property Observer。步骤104对应的程序代码可以为:
205、设备将通知消息通知给监听***属性的***对应的进程。
当确定出监听更新的***属性的Property Observer后,Property Service可以将包括更新的***属性及更新后的值的通知消息发送给确定出的Property Observer,由于一个进程可以对应至少一个Property Observer,接收到通知消息的Property Observer就可以将通知消息发送给对应的进程,使得关注更新的***属性的其它进程可以及时获知***属性的更新值,进而进行其它的逻辑处理。
举例来说,Android***的设备为具有Android***的电视机,要实现对于电视机的自动控制动态背光或运动估计和运动补偿(Motion Estimate and MotionCompensation,MEMC)功能,需要在进程(Process)A的线程中进行屏幕菜单式调节方式(On-Screen Display,OSD)的检测,当检测到当前存在OSD时,进程A将persist.sys.osd属性设置为1,当不存在OSD时,将persist.sys.osd属性设置为0。由于还存在对persist.sys.osd属性感兴趣的其它进程例如进程B,进程B可以根据persist.sys.osd属性的变化来执行实际的开启、关闭动态背光或MEMC的动作。现有技术中,有两种方式实现进程B获取该persist.sys.osd属性值。一种是使用原有的通知机制,即当任一***属性变化时,会通知其他所有进程***属性发生变化,包括对该persist.sys.osd属性感兴趣和不感兴趣的进程,且当进程B获知***属性变化时,但是并不知晓哪个***属性发生了变化,会触发进程B对感兴趣的***属性都进行查询,这样会影响***的执行效率;另一种是当通过串口/adb更新***属性时,由于受制于Binder间的通信,不能触发进程B的查询,需要在进程B中建立一个线程,每隔n毫秒去查询一次进程B感兴趣的***属性的值,也会影响***的执行效率。如图3所示,为本发明实施例提供的一种实现自动控制动态背光/MEMC功能过程中通知***属性更新的流程图。通过本发明上述实施例,当init进程启动时,电视机会为init进程创建消息队列,而后Property Service也会启动,消息队列可以与Property Service进行进程间通信,Property Service可以接收进程启动后的注册消息,注册消息包括进程对应的Property Observer和Property Observer监听的properties,例如上述根据persist.sys.osd属性值的变化开启、关闭动态背光/MEME的进程B启动运行后,会发送注册消息给Property Service,注册消息中包括进程B的Property Observer和persist.sys.osd属性。假设Property Observer所在的进程为进程C,当需要在进程A的线程中进行OSD检测并需要对persist.sys.osd属性值进行设置时,会调用到init进程中进行设置,即控制init进程通过消息队列向进程C中的Property Service发送通知消息,以通知Property Service更新的persist.sys.osd属性值。而后电视机遍历注册到PropertyService中的每个Property Observer以及每个Property Observer监听的properties,由于进程B对应的Property Observer及Property Observer监听的properties注册在Property Service中,该Properties包括上述persist.sys.osd属性,即进程B对persist.sys.osd属性感兴趣,因此,电视机的Property Service会确定出进程B的Property Observer为监听persist.sys.osd属性的***,而后电视机将通知消息发送给监听persist.sys.osd属性的Property Observer对应的进程B,以便进程B根据persist.sys.osd属性的值是否为1确定动态背光/MEMC的开关,实现了对persist.sys.osd属性感兴趣的进程的及时通知,对persist.sys.osd属性不感兴趣的进程将不会收到通知消息。即使通过串口/adb输入setprop命令修改persist.sys.osd属性值时,由于当需要更新***属性时,会调用到init进程中进行设置,并通过消息队列向Property Service发送通知消息,也就是说,当通过串口/adb输入setprop命令修改persist.sys.osd属性值时,会调用到init进程中来执行***属性更新的通知,不受制于Binder间进程的通信,提升了***的执行效率,保证了***的稳定性和信息的实时性。
因此,本发明实施例提供一种通知***属性更新的方法,在用户级程序启动时,创建一通信单元,通信单元用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,注册消息包括进程对应的***和***监听的属性列表;启动属***,并循环等待通过通信单元发送的通知消息,通知消息包括更新的***属性及***属性更新后的值;当获知***属性更新时,通过通信单元向属***发送通知消息;遍历注册到属***中的每个***和每个***监听的属性列表,确定监听***属性的***;将通知消息通知给监听***属性的***对应的进程。这样,由于进程设有对应的***和***监听的属性列表,即进程感兴趣的属性的列表,并注册在属***中,对于现有技术中***属性更新通知不明确的问题,本申请可使得在某一***属性更新时,通过用户级程序创建的通信单元向属***中发送通知,以通知属***更新的***属性以及更新后的值,而后通过遍历属***中的***以及***监听的属性列表确定监听该***属性的***,以便将通知消息通知给该***属性的***对应的进程,使得通知目标明确,不需要像现有技术中的进程在获知***属性变化时还需重新获取一遍进程所关注的***属性;对于现有技术中如果通过串口或adb工具包更新***属性的值时由于受制于Binder进程间通信,无法进行***属性更新的通知的问题,本申请中在***属性更新时,可调用到用户级程序中,以便控制用户级程序与属***进行通信,进而将更新的***属性通知到注册到属***中对***属性感兴趣的进程,不受制于Binder进程间通信。因此,本发明可解决***属性的通知机制通知的目标不明确及无法通知的问题,进而提升了***开发和调试过程的执行效率,保证了***的稳定性和信息的实时性。
本发明实施例还提供一种通知***属性更新的装置4,如图4所示,包括:
启动单元401,用于启动用户级程序;
创建单元402,用于创建一通信单元,通信单元用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,注册消息包括进程对应的***和***监听的属性列表;
启动单元401还用于,启动属***,并循环等待通信单元发送的通知消息,通知消息包括更新的***属性及***属性更新后的值;
控制单元403,用于当获知***属性更新时,通过通信单元向属***发送通知消息;
遍历单元404,用于遍历注册到属***中的每个***和每个***监听的属性列表;
确定单元405,用于确定监听***属性的***;
通知单元406,用于将通知消息通知给监听***属性的***对应的进程。
可选的,通信单元为消息队列、共享内存或管道中的任一种。
可选的,当通信单元为消息队列时,创建单元402用于:通过JAVA本地调用JNI初始化本地层的属性更新对象,以循环等待***属性更新时通过消息队列发送的通知消息。
可选的,控制单元403用于:
当任一进程调用设置属性的函数时,将设置属性的函数调用到用户级程序的进程中;
确定设置属性的函数中***属性将要更新后的值与当前***属性的值是否相同;
若不同,则更新***属性的值,并通过用户级程序的进程将***属性及***属性更新后的值写入消息队列中;
通过属性更新对象接收消息队列发送的通知消息,并在接收到后向属***发送通知消息。
可选的,控制单元403还用于:
当任一进程启动运行时,控制任一进程向属***注册任一进程对应的***以及***监听的属性列表;
当任一进程停止运行时,在属***中注销任一进程对应的***以及***监听的属性列表。
本发明实施例提供一种通知***属性更新的装置,在用户级程序启动时,创建一通信单元,通信单元用于与属***进行进程间通信,属***用于接收进程启动后的注册消息,注册消息包括进程对应的***和***监听的属性列表;启动属***,并循环等待通过通信单元发送的通知消息,通知消息包括更新的***属性及***属性更新后的值;当获知***属性更新时,通过通信单元向属***发送通知消息;遍历注册到属***中的每个***和每个***监听的属性列表,确定监听***属性的***;将通知消息通知给监听***属性的***对应的进程。这样,由于进程设有对应的***和***监听的属性列表,即进程感兴趣的属性的列表,并注册在属***中,对于现有技术中***属性更新通知不明确的问题,本申请可使得在某一***属性更新时,通过用户级程序创建的通信单元向属***中发送通知,以通知属***更新的***属性以及更新后的值,而后通过遍历属***中的***以及***监听的属性列表确定监听该***属性的***,以便将通知消息通知给该***属性的***对应的进程,使得通知目标明确,不需要像现有技术中的进程在获知***属性变化时还需重新获取一遍进程所关注的***属性;对于现有技术中如果通过串口或adb工具包更新***属性的值时由于受制于Binder进程间通信,无法进行***属性更新的通知的问题,本申请中在***属性更新时,可调用到用户级程序中,通过用户级程序与属***进行通信,进而将更新的***属性通知给注册到属***中对***属性感兴趣的进程,不再受制于跨进程通信。因此,本发明可解决***属性的通知机制通知的目标不明确及无法通知的问题,进而提升了***开发和调试过程的执行效率,保证了***的稳定性和信息的实时性。
在本申请所提供的几个实施例中,应该理解到,所揭露的终端和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种通知***属性更新的方法,其特征在于,包括:
在用户级程序启动时,创建一通信单元,所述通信单元用于与属***进行进程间通信,所述属***用于接收进程启动后的注册消息,所述注册消息包括所述进程对应的***和所述***监听的属性列表;
启动所述属***,并循环等待通过所述通信单元发送的通知消息,所述通知消息包括更新的***属性及所述***属性更新后的值;
当获知所述***属性更新时,调用所述用户级程序的进程,通过所述通信单元向所述属***发送所述通知消息;
遍历注册到所述属***中的每个***和所述每个***监听的属性列表,确定监听所述***属性的***;
将所述通知消息通知给监听所述***属性的***对应的进程。
2.根据权利要求1所述的方法,其特征在于,所述通信单元为消息队列、共享内存或管道中的任一种。
3.根据权利要求2所述的方法,其特征在于,当所述通信单元为所述消息队列时,所述启动所述属***,并循环等待通过所述通信单元发送的通知消息包括:
启动所述属***,通过JAVA本地调用JNI初始化本地层的属性更新对象,以循环等待所述***属性更新时通过所述消息队列发送的所述通知消息。
4.根据权利要求3所述的方法,其特征在于,所述当获知所述***属性更新时,调用所述用户级程序的进程,通过所述通信单元向所述属***发送所述通知消息包括:
当任一进程调用设置属性的函数时,将所述设置属性的函数调用到所述用户级程序的进程中;
确定所述设置属性的函数中所述***属性将要更新后的值与当前所述***属性的值是否相同;
若不同,则更新所述***属性的值,并通过所述用户级程序的进程将所述***属性及所述***属性更新后的值写入所述消息队列中;
通过所述属性更新对象接收所述消息队列发送的所述通知消息,并在接收到后向所述属***发送所述通知消息。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
当任一进程启动运行时,控制所述任一进程向所述属***注册所述任一进程对应的***以及所述***监听的属性列表;
当所述任一进程停止运行时,在所述属***中注销所述任一进程对应的***以及所述***监听的属性列表。
6.一种通知***属性更新的装置,其特征在于,包括:
启动单元,用于启动用户级程序;
创建单元,用于创建一通信单元,所述通信单元用于与属***进行进程间通信,所述属***用于接收进程启动后的注册消息,所述注册消息包括所述进程对应的***和所述***监听的属性列表;
所述启动单元还用于,启动所述属***,并循环等待所述通信单元发送的通知消息,所述通知消息包括更新的***属性及所述***属性更新后的值;
控制单元,用于当获知所述***属性更新时,通过所述通信单元向所述属***发送所述通知消息;
遍历单元,用于遍历注册到所述属***中的每个***和所述每个***监听的属性列表;
确定单元,用于确定监听所述***属性的***;
通知单元,用于将所述通知消息通知给监听所述***属性的***对应的进程。
7.根据权利要求6所述的装置,其特征在于,所述通信单元为消息队列、共享内存或管道中的任一种。
8.根据权利要求7所述的装置,其特征在于,当所述通信单元为所述消息队列时,所述创建单元用于:通过JAVA本地调用JNI初始化本地层的属性更新对象,以循环等待所述***属性更新时通过所述消息队列发送的所述通知消息。
9.根据权利要求8所述的装置,其特征在于,所述控制单元用于:
当任一进程调用设置属性的函数时,将所述设置属性的函数调用到所述用户级程序的进程中;
确定所述设置属性的函数中所述***属性将要更新后的值与当前所述***属性的值是否相同;
若不同,则更新所述***属性的值,并通过所述用户级程序的进程将所述***属性及所述***属性更新后的值写入所述消息队列中;
通过所述属性更新对象接收所述消息队列发送的所述通知消息,并在接收到后向所述属***发送所述通知消息。
10.根据权利要求6-9任一项所述的装置,其特征在于,所述控制单元还用于:
当任一进程启动运行时,控制所述任一进程向所述属***注册所述任一进程对应的***以及所述***监听的属性列表;
当所述任一进程停止运行时,在所述属***中注销所述任一进程对应的***以及所述***监听的属性列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610340139.XA CN106055348B (zh) | 2016-05-19 | 2016-05-19 | 一种通知***属性更新的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610340139.XA CN106055348B (zh) | 2016-05-19 | 2016-05-19 | 一种通知***属性更新的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106055348A true CN106055348A (zh) | 2016-10-26 |
CN106055348B CN106055348B (zh) | 2019-07-12 |
Family
ID=57176636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610340139.XA Active CN106055348B (zh) | 2016-05-19 | 2016-05-19 | 一种通知***属性更新的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106055348B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052401A (zh) * | 2017-12-27 | 2018-05-18 | 深圳Tcl新技术有限公司 | ***属性监听方法、终端设备及计算机可读存储介质 |
CN110928702A (zh) * | 2018-09-20 | 2020-03-27 | 北京君正集成电路股份有限公司 | 多进程消息通讯*** |
CN111211971A (zh) * | 2020-01-03 | 2020-05-29 | 西安新能技术有限公司 | 一种支撑互联网问诊服务的集群式即时消息***及其实现方法 |
CN111290859A (zh) * | 2018-12-07 | 2020-06-16 | 成都鼎桥通信技术有限公司 | 一种双***终端初始化属性同步的方法和终端 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103546433A (zh) * | 2012-07-12 | 2014-01-29 | 阿里巴巴集团控股有限公司 | 信息同步***和方法 |
CN103838564A (zh) * | 2012-11-27 | 2014-06-04 | 重庆新媒农信科技有限公司 | 一种属性加载方法及*** |
CN104461621A (zh) * | 2014-11-28 | 2015-03-25 | 青岛海信宽带多媒体技术有限公司 | 一种更新属性信息的方法及装置 |
CN104536784A (zh) * | 2014-12-23 | 2015-04-22 | 北京国双科技有限公司 | 实时***更新方法及装置 |
-
2016
- 2016-05-19 CN CN201610340139.XA patent/CN106055348B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103546433A (zh) * | 2012-07-12 | 2014-01-29 | 阿里巴巴集团控股有限公司 | 信息同步***和方法 |
CN103838564A (zh) * | 2012-11-27 | 2014-06-04 | 重庆新媒农信科技有限公司 | 一种属性加载方法及*** |
CN104461621A (zh) * | 2014-11-28 | 2015-03-25 | 青岛海信宽带多媒体技术有限公司 | 一种更新属性信息的方法及装置 |
CN104536784A (zh) * | 2014-12-23 | 2015-04-22 | 北京国双科技有限公司 | 实时***更新方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052401A (zh) * | 2017-12-27 | 2018-05-18 | 深圳Tcl新技术有限公司 | ***属性监听方法、终端设备及计算机可读存储介质 |
CN108052401B (zh) * | 2017-12-27 | 2022-01-04 | 深圳Tcl新技术有限公司 | ***属性监听方法、终端设备及计算机可读存储介质 |
CN110928702A (zh) * | 2018-09-20 | 2020-03-27 | 北京君正集成电路股份有限公司 | 多进程消息通讯*** |
CN110928702B (zh) * | 2018-09-20 | 2023-03-21 | 北京君正集成电路股份有限公司 | 多进程消息通讯*** |
CN111290859A (zh) * | 2018-12-07 | 2020-06-16 | 成都鼎桥通信技术有限公司 | 一种双***终端初始化属性同步的方法和终端 |
CN111290859B (zh) * | 2018-12-07 | 2023-08-18 | 成都鼎桥通信技术有限公司 | 一种双***终端初始化属性同步的方法和终端 |
CN111211971A (zh) * | 2020-01-03 | 2020-05-29 | 西安新能技术有限公司 | 一种支撑互联网问诊服务的集群式即时消息***及其实现方法 |
CN111211971B (zh) * | 2020-01-03 | 2021-11-05 | 西安新能技术有限公司 | 一种支撑互联网问诊服务的集群式即时消息***及其实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106055348B (zh) | 2019-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113110941B (zh) | 使用应用容器管理代码和依赖性数据的传递 | |
US11778057B2 (en) | System and method for intent-based service deployment | |
KR102008037B1 (ko) | 분산형 애플리케이션 객체에 대한 업데이트 통지를 제공하는 기법 | |
CN111290828A (zh) | 使用容器编排服务进行动态路由 | |
US11010215B2 (en) | Recommending applications based on call requests between applications | |
US20150135170A1 (en) | Methods and Systems for Providing Compatibility of Applications with Multiple Versions of an Operating System | |
US20210173665A1 (en) | Bootstrapping Profile-Guided Compilation and Verification | |
US20090199213A1 (en) | Automatic Connections Between Application Components | |
US11327816B2 (en) | Monitoring components in a service framework | |
US8499294B2 (en) | Persisting the changes for managed components in an application server | |
CN106055348A (zh) | 一种通知***属性更新的方法和装置 | |
US20160224322A1 (en) | Dynamic agent delivery | |
CN105518698A (zh) | 用于评估访问***设备的应用请求的代理器 | |
CN103617055B (zh) | 一种在浏览器中启动应用程序的方法、装置和浏览器 | |
EP3213198B1 (en) | Monitoring a mobile device application | |
CN112930530A (zh) | 用于网络应用程序执行的客户端应用程序 | |
WO2022012305A1 (zh) | 推理应用中模型文件的管理方法及装置 | |
JP6418419B2 (ja) | ハードディスクがアプリケーションコードを実行するための方法および装置 | |
CN113504872B (zh) | 一种云物理机挂载虚拟磁盘的方法、***、设备及介质 | |
CN109445966A (zh) | 事件处理方法、装置、介质和计算设备 | |
US20180341475A1 (en) | Just In Time Deployment with Package Managers | |
CN112445683A (zh) | 一种多开检测绕过方法、存储介质、设备及*** | |
US20240232033A1 (en) | Configurable system tray application | |
WO2023202406A1 (zh) | 显示方法及电子设备 | |
CN114281359A (zh) | 隐藏应用软件的方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 266555 Qingdao economic and Technological Development Zone, Shandong, Hong Kong Road, No. 218 Patentee after: Hisense Visual Technology Co., Ltd. Address before: 266555 Qingdao economic and Technological Development Zone, Shandong, Hong Kong Road, No. 218 Patentee before: QINGDAO HISENSE ELECTRONICS Co.,Ltd. |