三种方法让你的Service不被“一键加速”和系统杀掉

基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然系统仅仅是在此时先把优先级低的kill掉,假设内存还是不够,也会把你的service干掉的.

1.android:persistent="true"

常驻内存属性对第三方app无效。以下是官方说明

android:persistent

Whether or not the application should remain running at all times — "true" if it should, and "false" if not. The default value is "false". Applications should not normally set this flag; persistence mode is intended only for certain system applications.

2.startForeground将其放置前台

Notification notification = new Notification();
notification.flags = Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_NO_CLEAR;
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
startForeground(1, notification); 

3.能够监听Intent.ACTION_TIME_TIC系统时钟广播。系统每隔一段时间发送这个广播。当service被杀死的时候,隔一段时间通过广播启动

动态注冊android.intent.action.TIME_TICK监听

推断service是否启动

	public boolean isServiceRunning(String serviceName)
	{
		ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
	    for (RunningServiceInfo service :manager.getRunningServices(Integer.MAX_VALUE))
	    {
	    	if(serviceName.equals(service.service.getClassName()))
	    	{
	    		return true;
	    	}
	    }
	    return false;
	}

接受到广播后推断是否启动该service 若没有启动就启动它

    if(intent.getAction().equals(Intent.ACTION_TIME_TICK))
    {

	if (!isServiceRunning(name))
	{
		Intent mIntent = new Intent(context, MyService.class);
		context.startService(mIntent);
	}
   }
时间: 2024-08-10 15:10:05

三种方法让你的Service不被“一键加速”和系统杀掉的相关文章

分区自动挂载的三种方法

一.修改/etc/rc.local配置文件追加类似命令:mount /dev/sda1  /sda1 到配置文件最后一行 二,修改/etc/fstab配置文件追加类似命令:/dev/sda1   /sda1  ext4   defaults   0  0 到配置文件中 三,安装autofs服务yum install autofs 追加类似命令:sda1   -fstype=ext4  :/dev/sda1 到配置/etc/autofs.misc文件中重启服务: service autofs re

iis 重启 (三种方法)

iis 重启 (三种方法) WINDOWS提供WEB服务的IIS有时候会出现访问过大导致网站打不开,这时重启IIS是最好的选择. 方法/步骤 1 1.界面操作 打开“控制面板”->“管理工具”->“服务”.找到“IIS Admin Service” 右键点击“重新启动” 弹出 “停止其它服务” 窗口,点击“是”. 2 2.Net 命令操作 点击 “开始”->“运行”,输入cmd 打开命令窗口: 输入 net stop iisadmin /y  回车停止IIS:再输入 net start

[转]Java实现定时任务的三种方法

在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: public class Task1 { public st

MySQL数据库的备份与恢复的三种方法

MySQL数据库的备份与恢复的三种方法 1.利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份 2.利用lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份 3.利用percona公司的xrabackup实现完全热备份与增量热备份 实验环境:RHEL5.8 ,SElinux关闭,MySQL是tar包初始化安装版本5.5.28 一.测试环境准备 1.1 mysql的安装就不说了,见http://laoguang.blog.51cto.com

Java/JSP获得客户端网卡MAC地址的三种方法解析

java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向137的端口发送查询指令的方法.(java/jsp) 简介: 第一种方法,在真正用到时候不知道为什么获得mac地址的指令阻塞了,不往下继续执行.而且速度是这三种方法中最慢的一种. 代码如下: String sip=""; String smac=""; sip = requ

Servlet实现的三种方法

(1)方法一: //这是第一个实现servlet的方法,使用时限servlet接口的方法来实现,使用的时候需要引用servlet-api.jar package com.lc; import javax.servlet.*; import java.io.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import

【转】asp.net导出数据到Excel的三种方法

来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/cpp2017/article/details/2244368 asp.net导出到Excel也是个老生常谈的问题,在此归纳一下. 第一种是比较常用的方法.是利用控件的RenderControl功能,得到该控件生成的HTML,然后以Excel文件的类型输出到客户端.这种方法生成的其实是个HTML文件

linux中传文件的三种方法、windows

第一种方法:使用vsftpd服务 ftp配置文件主要内容:[[email protected] vsftpd]# cat vsftpd.conf|grep -v ^#|grep -v ^$anonymous_enable=YES #匿名登陆local_enable=YES #允许使用本地用户来登陆ftplocal_root=/var/ftp/pub #write_enable=YES #开放本地用户写的权限local_umask=022 #FTP上本地的文件权限,默认是077 anon_uplo

docker 修改镜像和容器的存放路径(最新自己实践了第三种方法)

原文:docker 修改镜像和容器的存放路径(最新自己实践了第三种方法) docker info :查看docker的存储等相关信息. 将路径修改至挂载磁盘中 前提:磁盘已挂载成功 方法一: 1.停止docker 服务 service docker stop 2.备份数据到新的存放路径 cp -r /var/lib/docker/* /mnt/docker 3.备份 /var/lib/docker 路径 mv /var/lib/docker /var/lib/dockerbak} 4.创建软连接