9.5.1    使用前台服务

服务几乎都是在后台运行的,一直以来它都是默默地做着辛苦的工作。但是服务的系统 优先级还是比较低的,当系统出现内存不足的情况时,就有可能会回收掉正在后台运行的服 务。如果你希望服务可以一直保持运行状态,而不会由于系统内存不足的原因导致被回收, 就可以考虑使用前台服务。前台服务和普通服务最大的区别就在于,它会一直有一个正在运 行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的 效果。当然有时候你也可能不仅仅是为了防止服务被回收掉才使用前台服务的,有些项目由于特殊的需求会要求必须使用前台服务,比如说墨迹天气,它的服务在后台更新天气数据的同时,还会在系统状态栏一直显示当前的天气信息,如图 9.11 所示。

图   9.11

那么我们就来看一下如何才能创建一个前台服务吧,其实并不复杂,修改 MyService 中 的代码,如下所示:

public class MyService extends Service {

……

@Override

public void onCreate() {

super.onCreate();

Notification notification = new Notification(R.drawable.ic_launcher, "Notification comes", System. currentTimeMillis());

Intent notificationIntent = new Intent(this, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(this, "This is title", "This is content", pendingIntent);

startForeground(1, notification);

Log.d("MyService", "onCreate executed");

}

……

}

可以看到,这里只是修改了 onCreate()方法中的代码,相信这部分的代码你会非常眼熟。
没错!这就是我们在上一章中学习的创建通知的方法。只不过这次在构建出 Notification 对 象后并没有使用 NotificationManager 来将通知显示出来,而是调用了 startForeground()方法。 这个方法接收两个参数,第一个参数是通知的 id,类似于 notify()方法的第一个参数,第二 个参数则是构建出的 Notification 对象。调用 startForeground()方法后就会让 MyService 变成 一个前台服务,并在系统状态栏显示出来。

现在重新运行一下程序,并点击 Start Service 或 Bind Service 按钮,MyService 就会以前 台服务的模式启动了,并且在系统状态栏会显示一个通知图标,下拉状态栏后可以看到该通
知的详细内容,如图 9.12 所示。

图   9.12

android: 使用前台服务的更多相关文章

  1. Android通知栏前台服务

    一.前台服务的简单介绍 前台服务是那些被认为用户知道且在系统内存不足的时候不允许系统杀死的服务.前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下--这就意味着通知只有在这个 ...

  2. Android开发之如何保证Service不被杀掉(前台服务)

    序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill.参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自 ...

  3. Android Foreground Service (前台服务)

    一.如何保活后台服务 在Android Services (后台服务) 里面,我们了解了Android四大组件之一的Service,知道如何使用后台服务进行来完成一些特定的任务.但是后台服务在系统内存 ...

  4. Android 前台服务

    Android 前台服务 学习自 https://blog.csdn.net/guolin_blog/article/details/11952435#t3 前台服务漫谈 我们之前学习的Service ...

  5. android 前台服务不显示通知

    原因可以在哪里写了执行完成后就自动结束的吧 导致前台服务没有出现 如我 @Override public int onStartCommand(Intent intent, int flags, in ...

  6. Android客户端与服务端交互之登陆示例

    Android客户端与服务端交互之登陆示例 今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台 ...

  7. 服务 IntentService 前台服务 定时后台服务

    Activity public class MainActivity extends ListActivity {     private int intentNumber = 0;     @Ove ...

  8. Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...

  9. Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习,我们知道了 ...

随机推荐

  1. (转)C#中两个问号和一个问号 ??

    小问题难倒很多人.今天发现了这个问题,搜了很长时间才看到记录下. 实例:dt.Columns.Add(firstRow.GetCell(i).StringCellValue ?? string.For ...

  2. 为什么for(int i=0;i<9;i++) 在c语言中是错误的?

    显示表示,i 变量不可以在for中定义,必须在外面定义,这是为什么? 因为C99标准以前的C标准是不支持临时变量在for循环中定义的. C99标准就支持这样写.但是目前有些编译器并不怎么愿意支持C99 ...

  3. zendstudio 声明变量类型,让变量自动方法提示

    zendstudio 行内注释, 显式声明变量类型,让变量自动方法提示 $out = []; /* @var $row \xxyy\SizeEntity */ foreach ($rows[ 'lis ...

  4. Odoo10尝鲜:制造

    Odoo10主要是对 MRP 进行重构, 增加制造领料类型 简化工作中心 指定投料的作业 工作中心的生产效率指标,例如 OEE 基于历史工单数据,统计.计算工序作业时长     并增加了新功能,例如 ...

  5. Android(Xamarin)之旅(二)

    新的一年,新的开始,2016,我要做什么,大家要做什么,啦啦啦. OK,上篇已经介绍了几个简单的控件,这次,我们继续说说控件.但是可能有人认为这有什么难的,问题不在这里,而在于,如果你注意了每一个空间 ...

  6. Easyui 关闭弹出框后还显示验证提示信息

    今天下午做form表单,然后可以保存,可以关闭.可是关闭的时候老是会在屏幕左上角显示验证提示框,很是着急. 如图: 可能是easyui自己框架的问题,或许是因为网上有的人,自己代码写得有问题,没有调试 ...

  7. 关于卡尔曼滤波(Kalman Filter)的很好讲解

    http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies C#代码: double[] Data = new double[] { 0.39 ...

  8. Git平台使用时的配置分析

    Git仓库的配制文件分为三个部分: 1. .git/config:指定仓库配置(特定于某个仓库),获取或设置时使用--file参数(或者省去). 2. ~/.gitconfig:用户级别仓库配置(适用 ...

  9. Python 1 —— Start Up

    作为一种脚本语言,Python号称是万能的胶带语言,可以非常好的作为多种语言之间的粘合剂,因此从多种语言融合的角度看,学习Python是非常有必要的!下面对学习Python当中的一些重点进行记录! 一 ...

  10. [转]oracle审计详解

    http://blog.chinaunix.net/u2/66903/showart_2082884.html Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用 ...