Android应用中服务使用缺陷的分析与检测
发布时间:2021-10-15 13:50
服务作为Android应用中经常使用的组件,主要负责在后台执行耗时的操作。虽然服务与应用的图形用户界面无关,但研究发现服务的不恰当使用会导致应用性能的降低,例如会导致额外的能源消耗和不必要的资源占用。目前相关研究主要集中在Android应用中图形用户界面与能源缺陷的测试方面,并没有对服务的使用缺陷进行研究。为此,本文主要做了以下四个方面的工作。1.结合服务生命周期和三类服务使用方式,总结出四类服务使用反模式,并基于Android应用的过程间控制流图,给出四类反模式对应的具体缺陷的静态分析方法。2.利用线性时序逻辑给出服务使用四类反模式缺陷的形式化定义,并给出根据应用运行时产生的动态信息对相关特性进行运行时验证的动态分析方法。3.设计并实现了一个原型工具ServDroid,可以用于自动化检测Android应用中存在的服务使用模式及其使用存在的缺陷(反模式的具体实例)。该工具主要包括三个模块:静态分析模块,动态分析模块与使用缺陷修复模块。静态分析模块通过分析应用的代码和资源,得到服务使用模式,然后结合Android SDK提供的关键API进一步分析得出每一种服务使用模式存在的反模式缺陷并且...
【文章来源】:南京理工大学江苏省 211工程院校
【文章页数】:70 页
【学位级别】:硕士
【部分图文】:
启动服务生命周期
2背景硕士学位论文6图2.3启动服务生命周期绑定服务:绑定服务的生命周期如图2.4所示,下面对此进行说明。由于启动的服务无法与启动它们的组件交互,因此会存在绑定服务,它可以将数据发送到启动组件(客户端)。客户端组件可以调用Context.bindService()方法来获取与服务的连接。类似地,如果尚未创建服务实例,则通过回调onCreate()方法来创建服务。对于通过bindService()方法绑定的服务,其生命周期方法onBind()必须重写并返回IBinder对象,绑定该服务的组件便可以通过IBinder对象与服务进行通信。虽然可以多个客户端组件绑定到同一服务,但系统只会回调一次onCreate()方法。调用者通过调用Context.unbindService()方法(系统调用onUnbind())终止绑定服务,因为绑定服务的生命周期依赖于调用者,因此,当没有客户端组件绑定到服务时,该服务将被销毁。值得注意地,因为BroadcastReceiver组件的生命周期很短暂,因此Android系统不允许BroadcastReceiver绑定服务。混合服务:既被启动同时也被绑定到客户端组件上的服务,被称为启动和绑定服务,或简称为混合服务。混合服务可以先启动然后绑定,反之亦然。启动和绑定混合服务的组件可以不同。值得注意的是,当一个服务正在运行的时候,即使多个组件再次启动或者绑定该服务,但是服务仍不会再次实例化。图2.4绑定服务生命周期2.1.3Intent与Intent-Filter在Android系统中,同一Android应用的组件以及不同Android应用的组件之间,都可以进行通信。基本组件间通信的接口为Intent,其作用相当于调用API函数。例如:
2背景硕士学位论文8包含Intent的动作,Intent中的每个类别必须匹配Intent-Filter中的一个。数据匹配相对比较复杂,主要分为两部分:Uri匹配和MimeType匹配。Uri需要匹配host,port和path。若Intent-Filter声明了host、port或path属性,Intent中则必须包含且匹配这些属性。若Intent-Filter并未声明其中的某些属性,Intent中的该属性也就不需要匹配。当Intent与某个组件的Intent-Filter匹配时,该组件就是Intent的一个目标组件。对于Type匹配,Intent所指定的Type类型必须与Intent-Filter指定的MimeType相同,才能完全匹配。在一次匹配过程中,会找出系统上所有匹配该intent的组件。即隐式intent可以一次性启动多个组件。例如,当我们在使用某读书软件进行书单分享时,点击分享按钮,可能就会弹出多个软件,如微信,微博等,即有多个应用可以分享该书单,用户可以任选一个应用打开进行分享。2.1.4测试输入如图2.5所示,向Android应用提供输入主要通过两种方式:(1)事件(2)调用AndroidAPI的返回值[26]。事件可以是用户生成的(例如点击按钮)也可以是系统生成(例如广播电池状态的变化)的。本文主要考虑的是用户给定的测试输入,通过Android测试框架模拟用户的输入,使得Android应用可以自动化执行到给定的位置。图2.5Android应用与Android框架交互方式2.2相关工作我们的研究涉及到Android应用的GUI测试[27-29],服务分析[12-16]和测试以及能耗测试与分析[18-20]三个方面的工作。在本节中,我们将介绍这三个方面的最新技术。2.2.1GUI测试
本文编号:3438093
【文章来源】:南京理工大学江苏省 211工程院校
【文章页数】:70 页
【学位级别】:硕士
【部分图文】:
启动服务生命周期
2背景硕士学位论文6图2.3启动服务生命周期绑定服务:绑定服务的生命周期如图2.4所示,下面对此进行说明。由于启动的服务无法与启动它们的组件交互,因此会存在绑定服务,它可以将数据发送到启动组件(客户端)。客户端组件可以调用Context.bindService()方法来获取与服务的连接。类似地,如果尚未创建服务实例,则通过回调onCreate()方法来创建服务。对于通过bindService()方法绑定的服务,其生命周期方法onBind()必须重写并返回IBinder对象,绑定该服务的组件便可以通过IBinder对象与服务进行通信。虽然可以多个客户端组件绑定到同一服务,但系统只会回调一次onCreate()方法。调用者通过调用Context.unbindService()方法(系统调用onUnbind())终止绑定服务,因为绑定服务的生命周期依赖于调用者,因此,当没有客户端组件绑定到服务时,该服务将被销毁。值得注意地,因为BroadcastReceiver组件的生命周期很短暂,因此Android系统不允许BroadcastReceiver绑定服务。混合服务:既被启动同时也被绑定到客户端组件上的服务,被称为启动和绑定服务,或简称为混合服务。混合服务可以先启动然后绑定,反之亦然。启动和绑定混合服务的组件可以不同。值得注意的是,当一个服务正在运行的时候,即使多个组件再次启动或者绑定该服务,但是服务仍不会再次实例化。图2.4绑定服务生命周期2.1.3Intent与Intent-Filter在Android系统中,同一Android应用的组件以及不同Android应用的组件之间,都可以进行通信。基本组件间通信的接口为Intent,其作用相当于调用API函数。例如:
2背景硕士学位论文8包含Intent的动作,Intent中的每个类别必须匹配Intent-Filter中的一个。数据匹配相对比较复杂,主要分为两部分:Uri匹配和MimeType匹配。Uri需要匹配host,port和path。若Intent-Filter声明了host、port或path属性,Intent中则必须包含且匹配这些属性。若Intent-Filter并未声明其中的某些属性,Intent中的该属性也就不需要匹配。当Intent与某个组件的Intent-Filter匹配时,该组件就是Intent的一个目标组件。对于Type匹配,Intent所指定的Type类型必须与Intent-Filter指定的MimeType相同,才能完全匹配。在一次匹配过程中,会找出系统上所有匹配该intent的组件。即隐式intent可以一次性启动多个组件。例如,当我们在使用某读书软件进行书单分享时,点击分享按钮,可能就会弹出多个软件,如微信,微博等,即有多个应用可以分享该书单,用户可以任选一个应用打开进行分享。2.1.4测试输入如图2.5所示,向Android应用提供输入主要通过两种方式:(1)事件(2)调用AndroidAPI的返回值[26]。事件可以是用户生成的(例如点击按钮)也可以是系统生成(例如广播电池状态的变化)的。本文主要考虑的是用户给定的测试输入,通过Android测试框架模拟用户的输入,使得Android应用可以自动化执行到给定的位置。图2.5Android应用与Android框架交互方式2.2相关工作我们的研究涉及到Android应用的GUI测试[27-29],服务分析[12-16]和测试以及能耗测试与分析[18-20]三个方面的工作。在本节中,我们将介绍这三个方面的最新技术。2.2.1GUI测试
本文编号:3438093
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3438093.html