Android系统的AR应用性能及用户行为监测方法与流程

文档序号:18884508发布日期:2019-10-15 20:40阅读:307来源:国知局
Android系统的AR应用性能及用户行为监测方法与流程
本发明涉及性能测试领域,特别涉及android系统的ar应用性能及用户行为监测方法。
背景技术
:目前,ar技术被应用于越来越多的领域中。如ar购物、ar教育、ar远程协作等等。ar技术在为用户带来丰富体验的同时,也给人们工作生活的许多方面带来便利。随着ar技术的发展,出现在各个平台上的ar应用也越来越丰富,ar应用的渲染特效也越来越逼真。其中,android系统是ar应用最丰富的平台之一。如今,在android平台上,谷歌的ar技术在ar领域中处于领先地位,开发者可以借助arcore实现应用的ar功能。然而,由于ar应用的渲染效果越来越丰富,它对android系统的性能需求也越来越高。因此,为人们研究上述ar应用的性能以及分析用户行为提供一种收集数据的手段,帮助开发者构建更优质的ar应用,是非常有必要的。技术实现要素:本发明的目的在于克服现有技术的缺点与不足,提供android系统的ar应用性能及用户行为监测方法,为ar应用发掘性能瓶颈、分析用户行为提供了一种研究手段。本发明的目的通过以下的技术方案实现:android系统的ar应用性能及用户行为监测方法,包含以下顺序的步骤:s1、收集ar应用的性能数据及用户行为信息,收集过程分为以下五个部分:收集并上传设备基本信息;收集并上传应用运行时性能数据;收集并上传应用崩溃异常信息;收集并上传ar模型基本操作信息;收集并上传arcore功能使用情况;s2、将收集得到的各类数据封装为json格式并上传至服务器。所述收集并上传设备基本信息,具体为:1)收集制造商名称、操作系统类型、cpu型号,通过android系统的build类获取相应数据;2)收集cpu核心数:通过android系统的runtime类执行linux脚本,查询系统的cpu信息,暂存查询得到的信息,并从中获取cpu核心数;3)收集内存大小:通过android系统的bufferedreader类读取android系统的meminfo文件,从中获取系统内存大小;4)收集存储空间大小:通过android的statfs类获取文件系统的基本信息,从中读取系统的存储空间大小;5)收集网络连接方式:通过android系统的networkinfo类获取网络状态信息。所述收集并上传应用运行时性能数据,具体为:1)收集cpu占用率:通过android系统的runtime类执行linux脚本,查询系统的进程信息;暂存得到的信息,并从中获得应用的各个cpu核心的占用率总和;令占用率总和除以cpu核心数,其结果即为应用的cpu占用率;2)收集内存占用量:通过android系统的activitymanager类获取应用内存占用的数据;3)收集帧率:自定义类以实现choreographer.framecallback接口,重写接口方法doframe(longframetimenanos),在其中记录预设时间内的帧渲染次数;通过choreographer类的postframecallback方法把自定义类设为默认的帧渲染响应方法;读取所述预设时间内的帧渲染次数,令帧渲染次数除以时长,所得结果即为帧率。所述收集并上传应用崩溃异常信息,具体为:1)自定义类以实现thread.uncaughtexceptionhandler接口,重写接口方法uncaughtexception(threadt,throwablee),在其中收集崩溃摘要信息和崩溃堆栈信息并完成上传;2)通过thread类的setdefaultuncaughtexceptionhandler方法把自定义类设为默认的崩溃异常处理方法;3)当崩溃异常发生时,自定义方法即自动收集崩溃信息。所述收集并上传ar模型基本操作信息,具体为:1)创建自定义类以存放ar模型基本操作信息,所述ar模型基本操作信息包括:手势事件、模型凝视时间、模型添加/移除时间;2)更改arcore源代码,在transformablenode类的构造函数中增加参数以记录ar模型的名称;3)类似地,在rotationcontroller、scalecontroller、translationcontroller三个类中作相应修改;4)更改arcore源代码,在transformablenode类的构造函数中传递ar模型名称至rotationcontroller、scalecontroller、translationcontroller的实例;5)更改arcore源代码,在其rotationcontroller类的onendtransformation方法内把旋转手势信息记录至actioncollector类中;所述旋转手势信息包括ar模型名称、手势类型、手势完成时刻;6)类似地,在scalecontroller类及translationcontroller类中把缩放手势信息及移动手势信息记录至自定义类中;7)更改arcore源代码,在transformablenode类的构造函数中创建lifecyclelistener匿名类,用以监听ar模型的凝视时间;并使用方法addlifecyclelistener启动监听过程;同时传递ar模型名称至lifecyclelistener匿名类中;8)在lifecyclelistener匿名类的onactivated方法中,记录当前时刻,即ar模型开始出现于设备屏幕的时刻;并在ondeactivated方法中,记录当前时刻,即ar模型消失于设备屏幕的时刻;然后把ar模型凝视时间信息记录至自定义类中;所述ar模型凝视时间信息包括ar模型名称、开始凝视时刻、结束凝视时刻;9)更改arcore源代码,在transformablenode类中重载方法setparent,对参数nodeparent进行判断:若nodeparent为空,则把ar模型移除信息记录至自定义类中;否则,把ar模型放置信息记录至自定义类中;所述ar模型移除信息包括ar模型名称、移除时刻,所述ar模型放置信息包括ar模型名称、放置时刻。所述收集并上传arcore功能使用情况,具体为:1)创建自定义类用以存放arcore功能使用情况的信息;2)更改arcore源代码,对于arcore的特定功能,对特定功能的调用事件进行捕捉;当用户使用相应功能时,即能够记录其使用情况至自定义类中;所述特定功能包括模型阴影、光线强度、光线颜色的控制方法。本发明与现有技术相比,具有如下优点和有益效果:1、本发明利用android系统的一些特性完成数据收集工作。例如,android系统自带一系列类,用以记录设备的参数,如制造商名称、文件系统信息、网络连接方式等等,我们可以利用相关类获取相应的信息;由于android基于linux内核,我们也可以在android系统中执行linux脚本,获取系统底层的信息。另外,本发明还利用了android系统的垂直同步机制、崩溃处理机制等完成其余性能数据的收集;利用arcore的内部机制完成用户行为信息的收集。垂直同步机制用于解决android系统的ui流畅性问题,它依靠choreographer类统一绘制屏幕,每次同步将调用choreographer.framecallback的doframe方法完成相关工作。我们根据这一原理,为系统提供了一个同步过程中的事务处理方法,在其中实现屏幕的刷新事务的收集,从而计算得到帧率。android系统的崩溃处理机制用于解决崩溃异常问题。当线程出现了未捕获异常,系统会调用默认的异常处理方法:mdefaulthandler.uncaughtexception(thread,ex)进行处理,默认的处理方法主要完成强制停止应用运行的工作。我们根据这一原理,为系统提供了一个异常处理方法,在其中实现了崩溃信息的收集。arcore是谷歌提供的实现增强现实效果的sdk。我们可以使用transformablenode表征一个ar模型。每个transformablenode具有基本的操作功能,使得每个ar模型均可以被旋转、缩放、移动、添加/移除,以及在屏幕上出现/消失等等。我们根据上述基本操作的内部实现机制,对arcore源代码做出更改,为原本的arcore增添了收集基本操作信息的功能。此外,本发明的arcore还提供了一系列额外的功能以实现场景的特效渲染,比如灯光效果、物体材质的定制。这些功能可以在一定条件下被使用。开发者需要设计界面供用户使用上述功能,用户可以通过点击按钮、拖动滚动条等形式使用arcore功能。类似地,我们对arcore源代码作出更改,在相应的功能中插入了记录相应功能的信息的方法,从而实现arcore功能使用情况的收集。2、本发明设计了一种ar应用的性能及用户行为的监测方法,为提高应用质量、改善用户体验提供了可靠的根据。3、收集过程无需人为干预。采用线程以及配置文件执行收集方案。线程根据配置确定收集的次数、时长,从应用启动时刻即自动开始收集过程。4、使用方便。本发明设计的收集方法被封装为sdk供开发人员使用。开发者只需在ar应用中简单地启动我们的收集方法即可进行监测。另外,我们通过更改arcore源代码,实现了ar相关功能信息的自动收集功能,开发者无需改动其arcore相关代码便可获得监测结果,从而令使用步骤更为简便。附图说明图1为本发明所述android系统的ar应用性能及用户行为监测方法的流程图。图2为收集设备基本信息的流程图。图3为收集应用运行时性能数据的流程图。图4为收集应用崩溃异常信息的流程图。图5为收集手势事件的流程图。图6为收集ar模型凝视时间的流程图。具体实施方式下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。实施例一android系统的ar应用性能及用户行为监测方法,包含以下顺序的步骤:1)收集ar应用的性能数据及用户行为信息,根据收集方法的不同,收集过程可分为以下几个部分:第一部分:收集设备基本信息。包括收集制造商名称、操作系统类型、cpu型号、cpu核心数、内存大小、存储空间大小、网络连接方式。第二部分:收集应用运行时性能数据。包括收集cpu占用率、收集内存占用量、收集帧率。第三部分:收集应用崩溃信息。第四部分:收集ar模型基本操作信息。第五部分:收集arcore功能使用信息。2)确定各类数据的收集方案,对收集得到的各类数据进行处理,即,封装为json格式并上传至服务器。所述收集设备基本信息,其过程包括以下步骤:1.1)通过android系统的build类获取制造商名称、操作系统类型、cpu型号。具体为,读取build类的manufacturer字段,得到设备制造商名称;读取build类的hardware字段,得到cpu型号;获取build类的子类version,并读取version的字段relese,得到操作系统类型。1.2)通过执行终端命令并查询执行结果,获取cpu核心数。具体为,使用runtime类执行终端命令“cat/proc/cpuinfo”,执行结果暂存于process类中;通过process类的getinputstream方法获取字符串类型的结果信息,并使用bufferedreader类暂存该结果信息。在bufferedreader类中搜索结果信息,查询并记录字符串“processor”在结果信息中的出现次数,即cpu核心数。1.3)通过读取系统文件的信息,获取系统内存大小。具体为,通过android系统的filereader类读取android系统的meminfo文件,并把读取结果暂存于bufferedreader类中。在bufferedreader类中搜索结果信息,查询字符串“memtotal:”,读取其后的字符串,即描述内存大小的字符串,从而获得系统内存信息。1.4)通过android的statfs类获取文件系统的基本信息,从中读取系统的存储空间大小。1.5)通过android系统的networkinfo类获取网络连接方式。具体为,先通过android系统的context类的getsystemservice方法获取系统网络连接管理类connectivitymanager,使用该类的getactivenetworkinfo方法获取系统网络状态,即获取networkinfo类。再通过networkinfo类的gettype方法得到当前网络连接方式。所述收集cpu占用率,其过程包括以下步骤:2.1)使用runtime类执行终端命令“top”,执行结果暂存于process类中。2.2)通过process类的getinputstream方法获取字符串类型的结果信息,并使用bufferedreader类暂存该结果信息。2.3)获取当前应用进程pid,并将pid转换为字符串格式。2.4)在bufferedreader类中搜索结果信息,查询字符串格式的pid所在行;在该行读取各个cpu核心的占用率之和。2.5)获取cpu核心数,并将上一步的读取结果除以cpu核心数,得到cpu核心的平均占用率,即cpu占用率。所述收集内存占用量,其过程包括以下步骤:3.1)通过android系统的context类的getsystemservice方法获取系统活动管理类activitymanager。3.2)获取当前应用进程pid。3.3)通过activitymanager的方法getprocessmemoryinfo及其参数pid获取当前进程的内存。所述收集帧率,其过程包括以下步骤:4.1)创建一个变量framecount,用于记录一段时间内帧数。4.2)实现接口choreographer.framecallback,在其方法doframe中令framecount自增1。4.3)当一段时间结束后,读取framecount并除以该段时长,得到帧率。所述收集应用崩溃异常信息,其过程包括以下步骤:5.1)实现接口thread.uncaughtexceptionhandler,在其方法uncaughtexception中截获崩溃异常,即throwable类。5.2)获取崩溃摘要信息。通过throwable类的tostring方法获取崩溃摘要。5.3)获取崩溃堆栈信息。通过throwable类的getcause方法递归获取所有的堆栈信息,对于每个堆栈信息,使用printstacktrace将其信息输出至printwriter类中。printwriter类依次收集得到所有的堆栈信息后,将所有信息转换为字符串类型,其结果即为崩溃堆栈信息。所述收集ar模型的基本功能信息,其过程包括以下步骤:6.1)创建类modelcollector,用于存放ar模型基本操作信息。6.2)更改arcore源代码,在transformablenode类的构造函数中增加参数name,以记录ar模型的名称;6.3)类似地,在rotationcontroller、scalecontroller、translationcontroller三个类中作相应修改。6.4)更改arcore源代码,在transformablenode类的构造函数中传递参数name至rotationcontroller、scalecontroller、translationcontroller的实例。6.5)更改arcore源代码,在其rotationcontroller类的onendtransformation方法内把旋转手势信息记录至actioncollector类中。手势信息包括:ar模型名称、手势类型、手势完成时刻。6.6)类似地,在scalecontroller类及translationcontroller类中把缩放手势信息及移动手势信息记录至modelcollector类中。6.7)更改arcore源代码,在transformablenode类的构造函数中创建lifecyclelistener匿名类,用以监听ar模型的凝视时间;并使用方法addlifecyclelistener运行lifecyclelistener匿名类;同时传递参数name至lifecyclelistener匿名类中。6.8)在lifecyclelistener匿名类的onactivated方法中,记录当前时刻,即ar模型开始出现于设备屏幕的时刻;并在ondeactivated方法中,记录当前时刻,即ar模型消失于设备屏幕的时刻。6.9)在lifecyclelistener匿名类的ondeactivated方法中,把ar模型凝视时间信息记录至modelcollector类中。ar模型凝视时间信息包括:ar模型名称、开始凝视时刻、结束凝视时刻。6.10)更改arcore源代码,在transformablenode类中重载方法setparent,对参数nodeparent进行判断。若nodeparent为空,则把ar模型移除信息记录至modelcollector类中;否则,把ar模型放置信息记录至modelcollector类中。ar模型移除/放置信息包括:ar模型名称、移除/放置、移除/放置时刻。所述收集arcore功能使用情况,其过程包括以下步骤:7.1)创建类controlcollector,用于存放arcore功能使用情况的信息。7.2)更改arcore源代码,如表1,在其相应的方法内把arcore功能使用情况记录至controlcollector中。arcore功能使用情况的信息包括:功能名称、使用时刻。表1arcore功能及相应方法功能名称相应方法模型材质设置setmaterial模型阴影开关setshadowcaster光线颜色调节setcolor光线色温调节setcolortemperature光照范围调节setfalloffradius光线强度调节setintensity所述确定各类数据的收集方案,具体包括以下部分:8.1)在应用启动后,一次性收集设备基本信息。8.2)在应用运行期间,每隔指定时间收集一次运行时性能数据。8.3)当崩溃异常发生时,即自动收集崩溃信息。8.4)在应用运行期间,每隔指定时间,从modelcollector和controlcollector中读取ar基本操作信息和arcore功能使用情况。实施例二如图1-6,android系统的ar应用性能及用户行为监测方法,本实例实施有如下步骤:步骤一:创建收集基本信息的方法getappinfo();创建收集运行时性能数据、收集ar模型基本操作信息和收集arcore功能使用情况的线程。步骤二:创建收集类armonitor,并创建该类的方法start,在其中启动步骤一所述的各个线程,调用收集基本信息的方法,以及设置crashhandler为默认崩溃处理方法。步骤三:在ar应用中,把对原生arcore的引用替换为对更改后的arcore的引用。步骤四:在ar应用启动过程中,调用armonitor.start(),开始应用性能信息的收集。所述创建收集基本信息的方法,具体为,创建自定义方法,在其中收集基本信息,同时把基本信息封装为json格式并上传至服务器。所述创建收集运行时信息的线程,具体为,包括以下步骤:1)创建memorytask类用以实现runnable接口。2)在memorytask类中实现run方法,使用memorycollector收集一次内存占用率。3)将步骤2)的结果封装为json格式,并上传至服务器。4)休眠指定时间。5)持续重复步骤2)至步骤4)。6)类似地,创建cputask和frametask用以收集cpu占用率和帧率。所述创建收集ar模型基本信息和收集arcore功能信息的线程,具体为,包括以下步骤:1)创建modeltask类用以实现runnable接口。2)在modeltask类中实现run方法,从modelcollector中读取一次ar模型基本信息。3)将步骤2)的结果封装为json格式,并上传至服务器。同时清空modelcollector中暂存的数据。4)休眠指定时间。5)持续重复步骤2)至步骤4)。6)类似地,创建controltask类用以收集arcore功能信息。所述设置crashhandler为默认崩溃处理方法后,当崩溃发生时,将会默认调用crashhandler的uncaughtexception方法,在其中收集崩溃摘要和堆栈信息,将其封装为json格式,并立即上传至服务器。所述替换为对更改后的arcore的引用后,当ar模型的基本操作触发时,其基本操作信息将会自动被收集至modelcollector;当arcore功能被使用时,其使用信息也会自动被收集至controlcollector。所述调用armonitor.start()后,收集运行时信息的线程将每隔指定时间,收集并上传运行时信息;controltask、modeltask将每隔指定时间,从modelcollector、controlcollector中读取数据并上传;基本信息将被立即收集并上传;crashhandler.uncaughtexception()将被设置为ar应用的默认崩溃处理方法。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1