一种禁止后台应用自启动方法及装置
技术领域
本发明涉及移动设备技术领域,尤其涉及一种禁止后台应用自启动方法及装置。
背景技术
安卓系统是一种开放源代码的操作系统,广泛应用于智能手机、平板电脑等移动终端。BroadCastReceiver(广播接收器)和Service(服务)是安卓系统中最重要的两种组件。其中,BroadCastReceiver用来接收来自系统和应用中的广播并执行广播中的相关指令,以实现安卓系统内的信息传递;Service为没有用户界面的在后台运行的应用组件,一但Service被启动,即使相应的应用程序被关闭,Service仍然会在后台运行而不被用户察觉。
目前,安卓系统的某些应用程序在非用户主动运行或者已经被用户禁用的情况下仍然会出现自启动行为,自启动的应用程序将在后台继续运行,额外占用系统内存,增加用户流量开销,给用户带来极大困扰。通常情况下,在移动终端开机完成后,安卓系统会生成一条系统开启广播,并在安卓系统内传递。当应用程序的BroadCastReceiver接收到以上广播后,则可以在不经用户同意的情况下实现开机自启动功能。因此,当禁用一些非用户选择的应用程序的BroadCastReceiver后,应用程序将无法接收到系统开启广播,从而有效阻止其在开机时刻的自启动行为。
但是,在系统运行过程中,一旦用户由于需要而启动被禁用BroadCastReceiver的应用程序,则BroadCastReceiver的禁用将被中止而失效,从而无法继续阻止后台应用的自启动行为。目前,某些应用程序为了防止被系统或者用户关闭而设置了双进程Service,其中一个进程可以设置为后台应用的主进程,另外一个可以设置为后台应用的守护进程,当主进程被系统或者用户关闭后,守护进程可以通过调用主进程的部分组件,将主进程重新开启,使得应用程序继续在后台运行。同样的,当守护进程被系统或者用户关闭后,主进程也可以以同样的方式重启守护进程,从而实现后台应用被系统或者用户关闭后的自启动。重新启动并运行的后台应用将额外占用系统内存、影响手机运行速度、增加用户流量开销,进而降低用户体验度。
发明内容
本发明提供一种禁止后台应用自启动方法及装置,以解决现有技术中由于无法有效禁止后台应用自启动而降低用户体验度的技术问题。
本发明提供一种禁止后台应用自启动方法,所述方法包括:
获取第一应用程序中各应用包的初始信息,所述初始信息包括第一应用程序中各应用包包名以及与所述包名对应的应用包在第一应用程序开启前的初始状态,所述初始状态为允许启动状态或禁止启动状态;
获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息,所述目标应用包信息包括目标应用包包名;
将与所述目标应用包信息对应的目标应用包恢复至对应的初始状态。
优选的,所述获取第一应用程序切换至第二应用程序后关闭的目标应用包信息包括:
获取第一应用程序切换至第二应用程序后第二应用程序开启的各应用包包名;
根据所述第一应用程序中各应用包包名与所述第二应用程序开启的各应用包包名获取目标应用包包名。
优选的,所述获取第一应用程序中各应用包的初始信息包括:
获取第一应用程序在开启第一activity时对应的各应用包包名;
获取开启第一activity前一时刻与所述包名对应的应用包的初始状态。
优选的,所述获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息包括:
获取第二应用程序在开启第二activity时对应的各应用包包名,所述第二activity为所述第一activity切换后对应的activity;
根据所述第一应用程序在开启第一activity时对应的各应用包包名和所述第二应用程序在开启第二activity时对应的各应用包获取第一应用程序切换至第二应用程序后关闭的目标应用包包名。
优选的,所述方法在获取第一应用程序中各应用包的初始信息之前还包括:
设置系统白名单,所述系统白名单包括允许自启动的应用程序信息;
判断所述第一应用程序是否包含在所述系统白名单内,若所述第一应用程序不包含在所述系统白名单内,则获取所述第一应用程序中各应用包的初始信息。
本发明还提供一种禁止后台应用自启动装置,所述装置包括:
初始信息获取模块,所述初始信息获取模块用于获取第一应用程序中各应用包的初始信息,所述初始信息包括第一应用程序中各应用包包名以及与所述包名对应的应用包在第一应用程序开启前的初始状态,所述初始状态为允许启动状态或禁止启动状态;
目标应用包信息获取模块,所述目标应用包信息获取模块用于获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息,所述目标应用包信息包括目标应用包包名;
初始状态恢复模块,所述初始状态恢复模块用于将与所述目标应用包信息对应的目标应用包恢复至对应的初始状态。
优选的,所述目标应用包信息获取模块包括:
第一包名获取子模块,所述第一包名获取子模块用于获取第一应用程序切换至第二应用程序后第二应用程序开启的各应用包包名;
第一目标应用包包名获取子模块,所述第一目标应用包包名获取子模块用于根据所述第一应用程序中各应用包包名与所述第二应用程序开启的各应用包包名获取目标应用包包名。
优选的,所述初始信息获取模块包括:
第二包名获取子模块,所述第二包名获取子模块用于获取第一应用程序在开启第一activity时对应的各应用包包名;
初始状态获取子模块,所述初始状态获取子模块用于获取开启第一activity前一时刻与所述包名对应的应用包的初始状态。
优选的,所述目标应用包信息获取模块包括:
第三包名获取子模块,所述第三包名获取子模块用于获取第二应用程序在开启第二activity时对应的各应用包包名,所述第二activity为所述第一activity切换后对应的activity;
第二目标应用包包名获取子模块,所述第二目标应用包包名获取子模块用于根据所述第一应用程序在开启第一activity时对应的各应用包包名和所述第二应用程序在开启第二activity时对应的各应用包获取第一应用程序切换至第二应用程序后关闭的目标应用包包名。
优选的,所述装置还包括:
系统白名单设置模块,所述系统白名单设置模块用于设置系统白名单,所述系统白名单包括允许自启动的应用程序信息;
判断模块,所述判断模块用于判断所述第一应用程序是否包含在所述系统白名单内,若所述第一应用程序不包含在所述系统白名单内,则获取所述第一应用程序中各应用包的初始信息。
本发明的实施例提供的技术方案可以包括以下有益效果:
本发明提供一种禁止后台应用自启动方法及装置,所述方法包括:获取第一应用程序中各应用包的初始信息,所述初始信息包括第一应用程序中各应用包包名以及与所述包名对应的应用包在第一应用程序开启前的初始状态,所述初始状态为允许启动状态或禁止启动状态;获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息,所述目标应用包信息包括目标应用包包名;将与所述目标应用包信息对应的目标应用包恢复至对应的初始状态。本发明首先获取第一应用程序中各应用包的初始信息,即第一应用程序中各应用包包名以及对应的初始状态,并根据以上对应关系将第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包恢复至对应的初始状态。即初始状态若为允许启动状态,则将目标应用包再次恢复至允许启动状态;初始状态若为禁止启动状态,则将目标应用包再次恢复至禁止启动状态,从而确保安卓系统运行过程中后台应用的状态一直与初始状态相一致,进而保证包括开机时刻在内的任意时刻,后台应用均无法通过双进程守护等方式实现自启动行为,最终有效降低手机的待机时间、提高手机的响应速度以及用户体验度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
图1是本发明实施例中提供的一种禁止后台应用自启动方法的流程图;
图2是本发明实施例中提供的步骤S200的方法流程图;
图3是本发明实施例中提供的另一种禁止后台应用自启动方法的流程图;
图4是本发明实施例中提供的第三种禁止后台应用自启动方法的流程图;
图5是本发明实施例中提供的一种禁止后台应用自启动装置的结构示意图;
图6是本发明实施例中提供的目标应用包信息获取模块200的结构示意图;
图7是本发明实施例中提供的另一种禁止后台应用自启动装置的结构示意图;
图8是本发明实施例中提供的第三种禁止后台应用自启动装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置的例子。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。
请参考图1,所示为本发明实施例中提供的一种禁止后台应用自启动方法的流程图。
由图1可见,本发明提供的一种禁止后台应用自启动方法包括以下步骤:
步骤S100:获取第一应用程序中各应用包的初始信息。
所述初始信息包括第一应用程序中各应用包包名以及与所述包名对应的应用包在第一应用程序开启前的初始状态,所述初始状态为允许启动状态或禁止启动状态。本实施例中第一应用程序中各应用包的初始信息存储至mHashmap(哈希映射)中,第一应用程序中各应用包包名为哈希映射的关键字,根据应用包包名可以获取哈希映射中对应的应用包的初始状态。
在获取第一应用程序中各应用包的初始信息之前,可以预先设置系统内所有应用程序中各应用包的初始信息,即预先设置系统内各应用包的初始状态。如可以将某些常用应用程序中的某一个或某一些应用包设置为允许启动状态;对于系统内使用频率较低的应用程序,为了防止因其后台应用的自启动行为而额外消耗流量、占用系统内存,可以将以上应用程序内所有的应用包均设置为禁止启动状态。
步骤S200:获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息。
所述目标应用包信息包括目标应用包包名。
请参考图2,所示为本发明实施例中提供的步骤S200的方法流程图。
由图2可见,步骤S200还可以包括以下步骤:
步骤S201:获取第一应用程序切换至第二应用程序后第二应用程序开启的各应用包包名。
第二应用程序即第一应用程序关闭后开启的应用程序,为了确保第二应用程序的正常运行,第二应用程序中的各应用包均应为开启状态。本实施例中第二应用程序开启的各应用包包名存储于mArrayList(动态数组)中,当然,本发明其他实施例中第二应用程序开启的各应用包包名也可以存储于sqlite(轻型数据库)或Preference(首选项)中。
步骤S202:根据所述第一应用程序中各应用包包名与所述第二应用程序开启的各应用包包名获取目标应用包包名。
读取存储于哈希映射中的应用包包名,并读取存储于动态数组中应用包包名,若应用包包名存储于哈希映射中但不存储于动态数组中,则表明在第一应用程序切换至第二应用程序后,以上应用包已经被系统收回,将以上应用包确定为目标应用包,并存储目标应用包包名。
步骤S300:将与所述目标应用包信息对应的目标应用包恢复至对应的初始状态。
若第一应用程序为常用应用程序,则可以将其中的某一个或某一些应用包设置为允许启动状态,当再次启动第一应用程序时,无需读取界面资源,即可通过调用允许启动状态的应用包来直接开启第一应用程序,从而提高应用程序的响应速度。
若第一应用程序为使用频率较低的应用程序,则可以将第一应用程序中的所有应用包均设置为禁止启动状态,当用户需要开启第一应用程序时,正常启动第一应用程序,即正常调用第一应用程序中各应用包内的所有组件,当用户切换应用程序,即需要关闭第一应用程序而开启第二应用程序时,则第一应用程序中被关闭的目标应用包均恢复至禁止启动状态,从而彻底关闭第一应用程序,并保持第一应用程序中各应用包的禁止启动状态,防止第一应用程序由于设置双进程守护而实现不经用户允许的自启动行为。
进一步,应用包的初始状态由应用包内组件的初始状态决定,若应用包内任一个组件的初始状态为允许启动状态,则应用包的初始状态即为允许启动状态;否则为禁止启动状态。
本发明首先获取第一应用程序中各应用包的初始信息,即第一应用程序中各应用包包名以及对应的初始状态,并根据以上对应关系将第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包恢复至对应的初始状态。即初始状态若为允许启动状态,则将目标应用包再次恢复至允许启动状态;初始状态若为禁止启动状态,则将目标应用包再次恢复至禁止启动状态,从而确保安卓系统运行过程中后台应用的状态一直与初始状态相一致,进而保证包括开机时刻在内的任意时刻,后台应用均无法通过双进程守护等方式实现自启动行为,最终有效降低手机的待机时间、提高手机的响应速度以及用户体验度。
请参考图3,所示为本发明实施例中提供的另一种禁止后台应用自启动方法的流程图。
由图3可见,本发明其他实施例中,步骤S100还包括:
步骤S101:获取第一应用程序在开启第一activity(活跃界面)时对应的各应用包包名。
步骤S102:获取开启第一activity前一时刻与所述包名对应的应用包的初始状态。
本发明其他实施例中,步骤S200还包括:
步骤S211:获取第二应用程序在开启第二activity时对应的各应用包包名,所述第二activity为所述第一activity切换后对应的activity;
步骤S212:根据所述第一应用程序在开启第一activity时对应的各应用包包名和所述第二应用程序在开启第二activity时对应的各应用包获取第一应用程序切换至第二应用程序后关闭的目标应用包。
与上述实施例类似,本实施例中,步骤S101中获取的各应用包包名以及步骤S102中获取的对应的应用包的初始状态也存储至mHashmap(哈希映射)中;步骤S211中获取的各应用包包名存储于mArrayList中,也可以存储于sqlite或Preference中。
activity是Android组件中最基本也是最为常见用的组件之一,一个activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并对用户的事件做出响应。Android系统留有activity接口,在切换activity时,通过系统的回调,可以自动运行以上流程,无需额外判断应用程序的切换状态。将通过对比mHashmap和mArrayList中包名获取的目标应用包恢复至对应的初始状态后,将目标应用包的相关初始信息从mHashmap中删除,以便动态管理切换activity时刻的相关应用包状态。
另外,本发明其他实施例中,也可以将第一应用程序中各应用包的状态信息预先存储于一个mHashmap中,所述状态信息为第一应用程序中各应用包进入后台后需要恢复的状态。当切换activity时,一旦第一应用程序中的目标应用包进入后台,则直接在mHashmap中读取相应状态并恢复,并且状态恢复后无需删除相关数据,以便再次读取mHashmap。
请参考图4,所示为本发明实施例中提供的第三种禁止后台应用自启动方法的流程图。
由图4可见,本发明其他实施例中,在获取第一应用程序中各应用包的初始信息之前还包括:
步骤S111:设置系统白名单,所述系统白名单包括允许自启动的应用程序信息。
本实施例中,系统白名单包括允许自启动的应用程序信息,应用程序信息可以包括应用程序名称、应用程序属性以及存储位置等信息。系统白名单中的应用程序可以不经用户同意实施自启动行为。
步骤S112:判断所述第一应用程序是否包含在所述系统白名单内,若所述第一应用程序不包含在所述系统白名单内,则获取所述第一应用程序中各应用包的初始信息,并在切换应用程序时,将目标应用包恢复至初始状态。
本实施例可以通过在系统白名单内检索第一应用程序名称的方式判断第一应用程序是否包含在所述系统白名单内的方法,若在系统白名单内检索到第一应用程序名称,则说明第一应用程序包含在所述系统白名单内,在切换应用程序时,无需将目标应用包恢复至初始状态。
请参考图5,所示为本发明实施例中提供的一种禁止后台应用自启动装置的结构示意图。
由图5可见,所述装置包括:
初始信息获取模块100,所述初始信息获取模块100用于获取第一应用程序中各应用包的初始信息,所述初始信息包括第一应用程序中各应用包包名以及与所述包名对应的应用包在第一应用程序开启前的初始状态,所述初始状态为允许启动状态或禁止启动状态;
目标应用包信息获取模块200,所述目标应用包信息获取模块200用于获取第一应用程序切换至第二应用程序后第一应用程序关闭的目标应用包信息,所述目标应用包信息包括目标应用包包名;
初始状态恢复模块300,所述初始状态恢复模块300用于将与所述目标应用包信息对应的目标应用包恢复至对应的初始状态。
请参考图6,所示为本发明实施例中提供的目标应用包信息获取模块200的结构示意图。
由图6可见,目标应用包信息获取模块200包括:
第一包名获取子模块201,所述第一包名获取子模块201用于获取第一应用程序切换至第二应用程序后第二应用程序开启的各应用包包名;
第一目标应用包包名获取子模块202,所述第一目标应用包包名获取子模块202用于根据所述第一应用程序中各应用包包名与所述第二应用程序开启的各应用包包名获取目标应用包包名。
请参考图7,所示为本发明实施例中提供的另一种禁止后台应用自启动装置的结构示意图。
由图7可见,所述初始信息获取模块100包括:
第二包名获取子模块101,所述第二包名获取子模块101用于获取第一应用程序在开启第一activity时对应的各应用包包名;
初始状态获取子模块102,所述初始状态获取子模块102用于获取开启第一activity前一时刻与所述包名对应的应用包的初始状态。
目标应用包信息获取模块200包括:
第三包名获取子模块211,所述第三包名获取子模块211用于获取第二应用程序在开启第二activity时对应的各应用包包名,所述第二activity为所述第一activity切换后对应的activity;
第二目标应用包包名获取子模块212,所述第二目标应用包包名获取子模块212用于根据所述第一应用程序在开启第一activity时对应的各应用包包名和所述第二应用程序在开启第二activity时对应的各应用包获取第一应用程序切换至第二应用程序后关闭的目标应用包包名。
请参考图8,所示为本发明实施例中提供的第三种禁止后台应用自启动装置的结构示意图。
由图8可见,所述装置还包括:
系统白名单设置模块111,所述系统白名单设置模块111用于设置系统白名单,所述系统白名单包括允许自启动的应用程序信息;
判断模块112,所述判断模块112用于判断所述第一应用程序是否包含在所述系统白名单内,若所述第一应用程序不包含在所述系统白名单内,则获取所述第一应用程序中各应用包的初始信息。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。