APP如何不被安卓系统清理垃圾

一个是尽量提高APP权限,无非就是保持APP始终界面在前台
二是使用守护进程方法,被清理了立刻自己启动,
三是前台跟后台进程分开,被重启了恢复原始环境。
// 申请设备电源锁,在服务start的时候。
private WakeLock mWakeL
private void acquireWakeLock()
&&&&if&(null == mWakeLock)
&&&&&&&&PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
&&&&&&&&mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,&"LoginService");
&&&&&&&&if&(null != mWakeLock) {
&&&&&&&&&&&&mWakeLock.acquire();
//&释放设备电源锁,在服务Destory的时候
private void releaseWakeLock()
&&&&if&(null != mWakeLock)
&&&&&&&&mWakeLock.release();
&&&&&&&&mWakeLock =
这个方法是防止手机休眠。你的服务就会一直运行下去,不会被系统kill掉。亲测可行。还有在onStartCommand里面最后return super.onStartCommand(intent, START_STICKY, startId);
QQ在通知栏不是设了一个不同于一般通知的通知
代码如下:
Notification notification = new Notification(R.drawable.qqbatch_logo, getString(R.string.app_name),System.currentTimeMillis());
&&&&&&&&PendingIntent pendingintent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
&&&&&&&&notification.setLatestEventInfo(this,&"xxxx",&"xxxxxxxxx", pendingintent);
&&&&&&&&startForeground(0x111, notification);
阅读(...) 评论()android开发怎么让个推服务不被手机系统杀掉_百度知道
android开发怎么让个推服务不被手机系统杀掉
我有更好的答案
服务是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切换到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至执行进程间通信(IPC)。例如,一个服务可能处理网络通信,播放音乐,执行文件I/O,或与一个内容提供者交互,都在后台执行。一个服务本质上讲有两种形式:Started 启动的started 形式的服务是指当一个应用组件(比如 activity )通过startService()方法开启的服务。一旦开启,该服务就可以 无限期 地在后台运行,哪怕开启它的组件被销毁掉。通常,开启的服务执行一个单独的操作且并不向调用者返回一个结果。比如,可能从网络进行下载或者上传一个文件。当任务完成,服务就该自我停止。Bound 绑定的bound 形式的服务是指一个应用组件通过调用 bindService() 方法与服务绑定。一个绑定的服务提供一个客户-服务端接口,以允许组件与服务交互,发送请求,获得结果,甚至执行进程间通信。一个绑定的服务只和与其绑定的组件同时运行。多个组件可以同时绑定到一个服务,但当全部接触绑定后,服务就被销毁。虽然分这两类,但是一个服务可以同时使用这两种方式——可以用 started 无限期的运行,同时允许绑定。只需要在服务中实现两个回调方法: onStartCommand() 允许组件开启服务, onBind() 允许绑定。不论应用程序是怎么起服务的, 任何 应用程序都可以用这个服务。同样的,任何组件可以使用一个 Activity 通过传递 Intent 开启服务。你也可以在配置文件设置服务为私有来防止其他应用访问该服务。注意: 一个服务在进程中的主线程运行——一个服务 不会 创建自己的线程,也 不会 在另外的进程运行(除非另外指定)。这意味着,如果服务需要做一些频繁占用CPU的工作或者会发生阻塞的操作,你需要在服务中另开线程执行任务。这可以降低产生ANR的风险,提高用户体验。基础创建一个服务需要建立一个 Service 相关的子类,然后需要实现一些回调方法,好在不同的生命周期内做对应处理和绑定服务,比较重要的方法如下:onStartCommand() 当其他组件,如 activity 请求服务启动时,系统会调用这个方法。一旦这个方法执行,服务就开始并且无限期的执行。如果实现这个方法,当这个服务完成任务后,需要你来调用 stopSelf() 或者 stopService() 停掉服务。如果只想提供绑定,不需要自己实现这个方法。onBind() 当有其他组件想通过 bindService() 方法绑定这个服务时系统就会调用此方法。在实现的方法里面,必须添加一个供客户端使用的接口通过返回一个 IBinder 来与服务通信,这个方法必须实现。当然不想允许绑定的话,返回 null 即可。onCreate() 服务第一次建立的时候会调用这个方法,执行一次性设置程序,在上面2个方法执行前调用。如果服务已存在,则不执行该方法。onDestroy() 服务不再使用则使用该方法。服务应该实现这个方法来清理诸如线程,注册的监听器等资源。这是最后调用的方法。安卓系统只会在内存占用很高,必须恢复系统资源供当前运行程序的情况下强制停掉一个运行中的服务。如果服务绑定在当前运行的程序中,就几乎不会被杀掉,如果服务声明了在前台运行(其实在后台,只是给系统一个错的信息来提高优先级),就几乎不会被杀掉。另外,如果一个服务正在运行,且运行了很久,系统就会根据运行时间把其排在后台任务列表的后面,则这个服务很容易被杀掉。根据onStartCommand() 的返回值设置,服务被杀掉后仍可以在资源充足的条件下立即重启。是用一个服务好还是开一个线程好一个服务就是一个可以忽略交互,在后台独立运行的组件,如果你需要这样就用服务如果你需要在用户与程序交互时在主线程外执行任务,那就开个线程吧。比如想播放音乐,但只在程序运行时播放,你可能在 onCreate() 开一个线程,在 onStart() 中开启它,在 onStop() 停止它。也可以考虑使用 AsyncTask 或者HandlerThread 取代一般的线程。记住,如果使用一个服务,它还是默认在主线程中运行,如果会发生阻塞,还是要在服务中另开线程的。在 manifest 文件声明服务要使用服务就必须在 manifest 文件声明要用的所有服务,只用在&application& 标签内添加子标签 &service& 即可。 &manifest ...&
&application ...&
&service android:name=&.ExampleService&
android:enabled=[&true& | &false&]
android:exported=[&true& | &false&]
android:isolatedProcess=[&true& | &false&]
android:label=&string resource&
android:icon=&drawable resource&
android:permission=&string&
android:process=&string& &
&/service&
&/application&
&/manifest&下面对 service 标签属性做说明android:name你所编写的服务类的类名,可填写完整名称,包名+类名,如com.example.test.ServiceA ,也可以忽略包名,用 . 开头,如 .ServiceA,因为在 manifest 文件开头会定义包名,它会自己引用。一旦你发布应用,你就不能改这个名字(除非设置 android:exported=&false&),另外 name 没有默认值,必须定义。android:enabled是否可以被系统实例化,默认为 true因为父标签 &application& 也有 enable 属性,所以必须两个都为默认值true 的情况下服务才会被激活,否则不会激活。android:exported其他应用能否访问该服务,如果不能,则只有本应用或有相同用户ID的应用能访问。当然除了该属性也可以在下面 permission 中限制其他应用访问本服务。这个默认值与服务是否包含意图过滤器 intent filters 有关。如果一个也没有则为 falseandroid:isolatedProcess 设置 true 意味着,服务会在一个特殊的进程下运行,这个进程与系统其他进程分开且没有自己的权限。与其通信的唯一途径是通过服务的API(binding and starting)。android:label 可以显示给用户的服务名称。如果没设置,就用 &application& 的 lable 。不管怎样,这个值是所有服务的意图过滤器的默认 lable 。定义尽量用对字符串资源的引用。android:icon 类似 label ,是图标,尽量用 drawable 资源的引用定义。android:permission是一个实体必须要运行或绑定一个服务的权限。如果没有权限,startService() , bindService() 或 stopService() 方法将不执行,Intent 也不会传递到服务。如果属性未设置,会由 &application& 权限设置情况应用到服务。如果两者都未设置,服务就不受权限保护。android:process服务运行所在的进程名。通常为默认为应用程序所在的进程,与包名同名。&application& 元素的属性 process 可以设置不同的进程名,当然组件也可设置自己的进程覆盖应用的设置。如果名称设置为冒号 : 开头,一个对应用程序私有的新进程会在需要时和运行到这个进程时建立。如果名称为小写字母开头,服务会在一个相同名字的全局进程运行,如果有权限这样的话。这允许不同应用程序的组件可以分享一个进程,减少了资源的使用。创建“启动的”服务启动的(started)服务由 startService(Intent) 方法启动,在服务中的onStartCommand() 方法里获得 Intent 信息。关闭则由服务自己的方法 stopSelf() 或者由启动服务的地方调用 stopService(Intent) 方法来关闭。并不会因为启动服务的应用程序销毁而关闭。示例,一个应用需要保存数据到远程数据库,这时启动一个服务,通过创建启动的服务给服务传递数据,由服务执行保存行为,行为结束再自我销毁。因为服务跟启动它的应用在一个进程的主线程中,所以对于耗时的操作要起一个新的线程去做。//activity中Intent intent = new Intent(MainActivity.this, ServiceA.class);intent.putExtra(&name&, strName);startService(intent);//service中@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
// 获取数据
String strName = intent.getStringExtra(&name&);
// ... 数据库操作
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
耗时的操作
return Service.START_STICKY;}写服务有2种,继承 service 或者 IntentService 。后者是前者的子类。前者包含上面介绍的各种方法,用于普通的服务。后者可以自己开一个工作线程一个接一个处理多个请求。继承IntentService大多数服务不需要同时处理多个请求,继承 IntentService 是最好的选择IntentService处理流程创建默认的一个 worker 线程处理传递给 onStartCommand() 的所有 intent ,不占据应用的主线程创建一个工作队列一次传递一个 intent 到你实现的 onHandleIntent() 方法,避免了多线程在所以启动请求被处理后自动关闭服务,不需要调用 stopSelf()默认提供 onBind() 的实现,并返回 null默认提供 onStartCommand() 的实现,实现发送 intent 到工作队列再到你的onHandleIntent() 方法实现。这些都加入到 IntentService 中了,你需要做的就是实现构造方法和onHandleIntent() ,如下:public class HelloIntentService extends IntentService {
* A constructor is required, and must call the super IntentService(String)
* constructor with a name for the worker thread.
public HelloIntentService() {
super(&HelloIntentService&);
* The IntentService calls this method from the default worker thread with
* the intent that started the service. When this method returns, IntentService
* stops the service, as appropriate.
protected void onHandleIntent(Intent intent) {
// Normally we would do some work here, like download a file.
// For our sample, we just sleep for 5 seconds.
long endTime = System.currentTimeMillis() + 5*1000;
while (System.currentTimeMillis() & endTime) {
synchronized (this) {
wait(endTime - System.currentTimeMillis());
} catch (Exception e) {
}}如果需要重写其他回调方法,如 onCreate() , onStartCommand() 等,一定要调用super() 方法,保证 IntentService 正确处理 worker 线程,只有 onHandleIntent()和 onBind() 不需要这样。如:@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, &service starting&, Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent,flags,startId);}继承Service继承 Service 就可以实现对请求多线程的处理,前面介绍了 service 的生命周期,可以按照生命周期实现方法。就不放示例了。onStartCommand() 的返回值返回一个整型值,用来描述系统在杀掉服务后是否要继续启动服务,返回值有三种:START_NOT_STICKY 系统不重新创建服务,除非有将要传递来的 intent 。这是最安全的选项,可以避免在不必要的时候运行服务。START_STICKY 系统重新创建服务并且调用 onStartCommand() 方法,但并不会传递最后一次传递的 intent ,只是传递一个空的 intent 。除非存在将要传递来的 intent ,那么就会传递这些 intent 。这个适合播放器一类的服务,不需要执行命令,只需要独自运行,等待任务。START_REDELIVER_INTENT 系统重新创建服务并且调用 onStartCommand() 方法,传递最后一次传递的intent 。其余存在的需要传递的intent会按顺序传递进来。这适合像下载一样的服务,立即恢复,积极执行。如果想从服务获得结果,可以用广播来处理创建“绑定的”服务用 bindService() 方法将应用组件绑定到服务,建立一个长时间保持的联系。如果需要在 activity 或其他组件和服务交互或者通过进程间通信给其他应用程序提供本应用的功能,就需要绑定的服务。建立一个绑定的服务需要实现 onBind() 方法返回一个定义了与服务通信接口的IBinder 对象。其他应用程序组件可以调用 bindService() 方法获取接口并且调用服务上的方法。创建一个绑定的服务,第一件事就是定义一个说明客户端与服务通信方式的接口。这个接口必须是 IBinder 的实现,并且必须要从 onBind() 方法返回。一旦客户端接收到了 IBinder ,就可以通过这个接口进行交互。多个客户端可以绑定到一个服务,可以用 unbindService() 方法解除绑定,当没有组件绑定在服务上,这个服务就会被销毁。//activity中private ServiceConnection connB = new ServiceConnection() {
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
Log.v(tag, &Service B disconnected&);
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.v(tag, &Service B connected&);
MyBinderB binder = (MyBinderB)
ServiceB SB = binder.getService();
SB.showLog();
}};@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent a = new Intent(MainActivity.this, ServiceB.class);
bindService(a, connB, BIND_AUTO_CREATE);
}}//ServiceBpublic class ServiceB extends Service {
public void showLog() {
Log.i(tag, &serviceB--&showLog()&);
public class MyBinderB extends Binder {
public ServiceB getService() {
return ServiceB.
private MyBinderB myBinderB = new MyBinderB();
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return myBinderB;
}}启动前台服务前台服务是被认为是用户已知的正在运行的服务,当系统需要释放内存时不会优先杀掉该进程。前台进程必须发一个 notification 在状态栏中显示,直到进程被杀死。因为前台服务会一直消耗一部分资源,但不像一般服务那样会在需要的时候被杀掉,所以为了能节约资源,保护电池寿命,一定要在建前台服务的时候发notification ,提示用户。当然,系统提供的方法就是必须有 notification 参数的,所以不要想着怎么把 notification 隐藏掉。@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification noti = new Notification.Builder(this)
.setContentTitle(&Title&)
.setContentText(&Message&)
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent)
startForeground(12346, noti);
return Service.START_STICKY;}startForeground() 方法就是将服务设为前台服务。参数12346就是这个通知唯一的id,只要不为0即可。
专注培养IT技术人才
主营:PHP培训,JAVA培训,HTML5培训,UI培训,Linux培训,Python培训
为您推荐:
其他类似问题
android开发的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。平板/笔记本
HiLink生态产品
终端云服务专区
对于后台找不到的app,我们如何保护不被清理?
&登堂入室&
来自:浏览器
本帖最后由 lionta 于
14:14 编辑
本人最近下载到一款 sidebar软件,就是途中这条侧边栏,曾获得世界级安卓app大奖,软件非常好,应用也很顺畅,占用内存也才40M,然而遇到的问题是,app在后台不显示,自然也不能下拉上锁,这样一来,不管是用一键优化,还是 按那个垃 圾 桶,都会清理掉程序,在这里,我想咨询大家,如何才能保存其在后台的资源呢?
(275.86 KB, 下载次数: 3)
13:50 上传
width:100%">
&独步江湖&
来自:浏览器
在手机管家-自动启动管理 -找到sidebar,开启,就能保护它后台运行啦
谢谢你们 长那么好看还愿意跟我说话
width:100%">
&登堂入室&
来自:浏览器
在手机管家-自动启动管理 -找到sidebar,开启,就能保护它后台运行啦
这个已经设置,但是 还是会被清理掉,好像只有 后台向下拉上锁才能不被清理
width:100%">
&独步江湖&
来自:浏览器
这个已经设置,但是 还是会被清理掉,好像只有 后台向下拉上锁才能不被清理 ...
恩,你说的对,可以上个锁。开启受保护应用的话,清理了但是系统需要它运行的时候能自动运行的。
谢谢你们 长那么好看还愿意跟我说话
width:100%">
&登堂入室&
来自:浏览器
恩,你说的对,可以上个锁。开启受保护应用的话,清理了但是系统需要它运行的时候能自动运行的。 ...
第一,他后台看不到,所以上不了锁
第二,他是第三方应用,系统没有需要他的时候,所以他不会自动运行,自动运行仅仅存在与开机
width:100%">
&略有小成&
来自:浏览器
lionta 发表于
第一,他后台看不到,所以上不了锁
第二,他是第三方应用,系统没有需要他的时候,所以他不会自动运行, ...
我的也是&&后台看不见 没法锁&&真是对华为失望
width:100%">
&略有小成&
来自:浏览器
手机管家-电池管理-受保护应用,把它添加进去就可以了
width:100%">
&独步江湖&
来自:浏览器
第一,他后台看不到,所以上不了锁
第二,他是第三方应用,系统没有需要他的时候,所以他不会自动运行, ...
哦,你说这个意思呀。怎么会不启用到呀,它有这个侧边不就是在运行嘛?
谢谢你们 长那么好看还愿意跟我说话
width:100%">
&登堂入室&
来自:浏览器
手机管家-电池管理-受保护应用,把它添加进去就可以了
电池管理设定保护,是保护的 系统自主清理时候的保护
而现在存在的问题是,人为清理的时候,不能受到保护
width:100%">
&新学乍练&
来自:浏览器
我也有这个需求,现在解决了没?
width:100%">
雨后 海边……缤纷芳华高原美最瞬间(1)『走走拍拍』【风光】青岛世纪公园
花粉客户端
Make it Possible
Make your device special
华为云空间
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
增值电信业务经营许可证:苏B2-号|
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利手机后台程序太多 教你怎么关闭
手机后台程序太多 教你怎么关闭
编辑:Robert
来源:手机世界
相信有看5月5日晚7点中央电视台新闻联播的朋友会留意到,第一条是题为“消费新动向:指尖的力量”的类新闻。新闻中指出,及其相关产业带动的消费正在成为成为拉动经济增长的新动力。而应用则成为了用户们进行消费的桥梁。如今应用五花八门,用户在世界中畅游的时候也会遇到一些问题,比如,开多了后会很卡,很多用户想关闭那些后台运行的程序但是却不知道该怎么操作。其实要关闭后台程序可以有几种方法,下面小编就来一一教下大家。
一、在应用上退出程序
现在很多在退出后是不会在后台继续运行的,像这类应用我们只需在应用界面点击“返回键”两次即可退出,或者在应用设置处点击退出即可。
二、在设置里关闭程序
如果应用在前台关闭后仍然会运行,您也可以在设置里对程序进行关闭。
1、在“设置”里找到“应用程序”,在应用列表里找到该应用,如下图所示。
2、点击应用图标打开设置页面后点击“强行停止”即可。
三、用第三方关闭程序
现在很多管理都有关闭程序的功能,像、、之类的都可以实现。这里小编就以为例为大家讲解一下。
1、打开,在“加速”里找到“内存清理”并点开,如下图所示。
2、在“内存清理”页面选择需要清理的应用进程,有些如这类常用的可以不用清理,然后选择“一键清理”即可,如下图所示。
3、此外安装后在屏幕上会有个如下图显示所占内存百分比的小图标,点击打开小窗口,点击某个会关闭该应用,也可以点击“一键清理”关闭所有前台应用。
这里小编跟大家说下,中有些小占用的内存是很小的,对于这些如果用户常用的话是不需要去关闭其后台程序的,这样能加快您下次启动该的时间,增加用户体验。而对于占内存比较大的,我们可以手动对其进行关闭,保障系统运行的流程,也能节省电量。和iOS相比,安卓是一个更加开放的平台,带来了更多自由的同时,也容许了更多“法外之地”。App在安卓系统中的限制比iOS更小,这令安卓孕育出了很多流氓App。尽管Google一直尝试对后台增添更多限制、理清安卓的生态,但流氓App们见招拆招,使出了各种丧心病狂的手段来驻留后台。流氓App驻留后台有哪些奇技淫巧?一起来看看吧。很多App都会注册大量的后台服务,这些后台服务会消耗额外的资源和电量安卓系统的后台机制我们先来谈谈安卓的后台机制,这可以让我们更清晰地得知为何流氓App为何容易驻留在后台。安卓是一个基于Linux的操作系统,因此其后台机制也和Linux类似——一般情况下,返回桌面时程序并不会退出后台,而是在后台持续运行,当系统需要更多资源的时候,相应的程序才会被请出去。安卓并不是随便清理后台的进程的,在安卓系统中,App分为Foreground_App(前台应用)、Visiable_App(可见应用)、Secondary_App(二级应用)、Hidden_App(隐藏应用)、Content_Provider(内容提供器)、Empty_App(空应用)等状态。当内存不足的时候,系统会优先终止Empty_App进程和服务,将内存释放出去;内存再次吃紧,就开始对Content_Provider动手脚了,以此类推。因此,越重要的进程会越得到保留,越无关重要的进程会越被优先清理出内存,这方案乍看之下没啥问题。安卓把App状态分成不同类型,自动管理后台是否驻留然而事情并不尽如人意,流氓App之所以流氓,就是不守规则。安卓系统中留有太多余地让App在后台自由发挥了,就算是Android&6.0引进了Doze打盹机制、Android O倡导后台纯净(Background-free),流氓App们仍能不声不响地在后台龙盘虎踞。如果没有使用特别的杀后台工具或者对后台有特殊限制的ROM,流氓App们甚至能让手机化身续航两小时的暖手宝。流氓App驻留后台技巧:乱注册状态前面提到,安卓把App分为好几个状态,不过流氓App可不会遵守这些规矩,让后台按照这些状态来运行。例如,流氓App就可以通过startForeground来把自己注册成为前台应用,让自己的后台成为最高优先级,永远不会被系统干掉。安卓7.0对很多后台运行的App都在通知栏有公示,后来这些App不得不改变后台驻留的方法不过,这个方法已经有了Google官方的应对,在安卓4.3以上的系统中,如果有App乱注册这个状态,通知栏就会显示“XX正在后台运行”。尽管流氓App通过一些手段一度绕了过去,但在安卓7.0中Google封堵了该漏洞。如果你升级到了安卓7.0,某App在通知栏持续显示“XX正在后台运行”,不用怀疑,这就是个流氓App。流氓App驻留后台技巧:透明悬浮窗这是个脑洞大开的一招,我们知道和iOS不同,App可以在系统中显示悬浮窗,为用户提供各种实时信息。而开了悬浮窗的App,会一直运行,进程不会被随便清理掉。于是流氓App就在这方面动歪脑筋了,某流氓App会在设置一个1像素大小的透明悬浮窗,用户是看不到的,但这悬浮窗的确存在。App退到后台后,由于有悬浮窗的存在,进程也得以保留。这个方法也已经被Google所察觉,在新版的安卓系统以及很多第三方ROM中,App已经不能随便申请到悬浮窗的权限。流氓App驻留后台技巧:乱请求唤醒用过安卓的朋友都知道,流氓App最烦人的一点就在于胡乱自行启动,这和流氓App们胡乱请求唤醒是密不可分的。安卓系统拥有唤醒机制,App可以同某些具体事件,触发特定动作。例如到了时间,App可以触发铃声;又例如连上了网络或者间隔一段时间,App可以触发数据同步动作。这些动作都需要唤醒App才能运行,于是流氓App就把频频使用“Alarm”、“Sync Adapter”等周期性任务唤醒自己,让自己不断在后台启动,这也是很多杀后台App无法彻底干掉流氓App后台进程的原因。流氓App通常利用广播接收器触发后台自启动对此,Google官方也尝试使用对齐唤醒机制来解决。在安卓6.0中Google引入Doze机制,让后台进程尽量在统一的周期中同时唤醒,使CPU得到尽可能长的休眠时间。不过,这个机制并不够激进,需要手机无操作静止较长时间才会工作,总体而言效果有限。如果用户使用手机频度较大,Doze机制甚至不会生效,流氓App们依然会不断吞噬着手机电量。安卓6.0引入的Doze模式,旨在让App统一唤醒,但并不能彻底解决问题流氓App驻留后台技巧:进程相互唤醒除了利用安卓系统的唤醒机制,流氓App们还可以利用进程来相互唤醒。一方面,流氓App可以在后台注册多个进程,就算某个进程被干掉,也可以用其他进程来唤醒——如果你仔细观察,可以发现很多App都在后台注册了不止一个进程,为的就是不断唤醒;另一方面,流氓App们还可以抱团相互唤醒!当你开启了A应用后,它的进程可能会唤醒B应用,B应用的进程接而又会唤醒C应用,这种“链式唤醒”在国内的App中尤为常见,令人防不胜防。用绿色守护能观察到很多App都是由其他App唤醒的“链式唤醒”如此常见,是有原因的。由于Google服务的缺失,很多国内App为了实现推送和广告等功能,不得不使用一些第三方的SDK。这些第三方的SDK往往就会让App抱团唤醒,不少App其实不想耍流氓,但用了这些第三方SDK,也不得不变流氓。当然,解决方法还是有的,有心的开发者可以在使用流氓SDK的时候,接入Project Condom这个开源库,避免“链式唤醒”。Google也知道进程唤醒的问题所在,于是安卓8.0的开发规范要求App一旦进入后台,需要在短时间内停止所有的后台服务,也不可以随便启动新的后台服务。至于这个效果如何,目前安卓8.0尚未普及,还有待观察。流氓App驻留后台技巧:沆瀣一气这应该就是终极的大招了!如果流氓App本身就和ROM有勾结,这App无疑就获得了最高通行权,无论如何也不会被干掉。例如,你何时看到过原生安卓会干掉Google Play(别说Play服务不流氓)?国内的一堆ROM也不会干掉自家的流氓推送服务,还得靠推送来卖广告呢。面对这种情况,用户基本上是无能为力的。或许基于AOSP的第三方ROM可以解决问题,但并不是所有设备都有条件刷机。
主办单位:中国通信工业协会移动电话售后服务委员会
Copyright (C)
shouji315 All Rights Reserved.
京ICP备号-2
京公网安备号}

我要回帖

更多关于 安卓系统垃圾清理软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信