分类:C#、Android、VS2015;

创建日期:2016-02-29

一、简介

Android的活动(Activities)可以有多种状态,具体取决于用户的行为以及对操作系统的要求。虽然Activity的生命周期会随着状态的变化而改变,比如创建活动、转入后台、转到前台、销毁活动等,但是,实际上Acivity并不能在后台做任何实质性的UI交互处理。由于这个原因,Android才将在后台运行的进程称为Service,其本质含义就是:Service是独立运行的类的实例,它和Activity的生命周期并没有直接的关系。此外,在活动的生命周期期间,设计良好的应用程序不应该独占资源或导致应用程序崩溃。

1、后台任务(Backgrounding)

Android在后台处理的那些事(Backgrounding)实际上是前台应用程序和后台服务(Service)之间一种折中的解决办法,换言之,通过Backgrounding可以让设备资源不会消耗太快同时又能尽量响应前台的请求。

从功能上来说,Android应用程序中的后台任务(Backgrounding)非常类似于桌面应用程序的多任务,但它和桌面应用的多任务并不是一个概念。桌面计算机一般都有应用程序可用的多种资源,如大屏幕、电源、内存、各种外存等,因此这些应用程序可以一个接一个地排列显示在屏幕上同时运行,而且都能保持高性能。但是,移动应用程序的资源极其有限,很难在那么小的屏幕上同时显示多个高速运行的应用程序,因为真要这样做的话,手机电池的电量很快就会耗尽。

处于后台状态下的Activity实际上是不能执行任何操作的,因此它又提供了一个Android专用的Service的概念(Android Service)。之所以这样做,就是为了在Android App中启用后台处理,即通过提供调用应用程序组件的方式来实现Android Service。

Android Service通常仍属于所创建的应用程序的一部分,但他们在自己的生命周期中独立运行,与Activity的生命周期无关。这意味着即便用户将应用程序转入后台,服务仍然可以继续执行,甚至在操作系统停止或已销毁了所有应用程序活动的情况下,服务也照样可以继续执行。

对于后台运行的活动(Activities)来说,Android和iOS的处理方式是不同的。在Android系统中,Activities是用转入、转出后台的状态来体现的,这些状态是Activity生命周期的一部分。而iOS处理的办法则是将没有运行的活动直接转入到后台,同时,为了节省系统资源,转入到后台后不久就会停止它,即不再允许这些转入后台的活动运行任务。

下面的概览图列出了在Android App中哪些情况下应该使用哪种后台技术,请仔细研究这个图,它能帮你快速理解相关的概念和需要采用的技术。

2、前台任务(Forgrounding)

前台任务(Forgrounding)是指在Android在前台处理那些经常会被用户关注的后台Service,这些Service的特点是:内存过低时它不会自动成为被杀死的对象。前台任务必须向用户提供一个通知,而且只有在后台服务被终止或从前台任务中被移除之后,此通知才能消失。

例如,用后台服务来播放音乐的播放器就应该将其作为前台任务来处理,因为这能让用户通过前台通知(Notification)清楚地知晓后台服务的运行情况。在前台任务中,通知可能会标明当前正在播放的歌曲,并允许用户启动一个activity来与播放器进行交互。

要把你的后台服务作为前台任务来处理(这个任务就是在前台利用通知告诉用户正在运行的后台服务当前的情况),可以调用StartForeground()方法。此方法至少有两个参数:一个是通知的标识号(整数值),另一个是提供通知的Notification对象。另外还可以在这个方法中再添加更多的参数,比如,你可以每过1秒就告诉用户一次,也可以过1分钟才告诉用户一次。

要移除前台任务,请调用StopForeground()方法,这个方法接受一个布尔型参数,表示是否同时移除通知。此方法不会终止后台服务。不过,如果后台服务被你显式终止了,那么通知也会同时被移除。

注意:StartForeground()和StopForeground()方法是自Android 2.0 (API Level 5)开始引入的。 要让后台服务能在更早版本的平台上作为前台任务来处理,你必须使用以前提供的SetForeground()方法而不是StartForeground()方法。

【Android】15.1 后台任务和前台任务的更多相关文章

  1. 优化 Android 线程和后台任务开发

    在 Android 开发中,你不应该做任何阻碍主线程的事情.但这究竟意味着什么呢?在这次海湾 Android 开发者大会讲座中,Ari Lacenski 认为对于长时间运行或潜在的复杂任务要特别小心. ...

  2. Android开发_后台任务task管理_allowTaskReparenting alwaysRetainTaskState clearTaskOn

    1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“tru ...

  3. android 15 activity跳转

    从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ...

  4. Android开发艺术2之Activity的启动模式

    Activity是Android的四大组件之一,他的重要性毋庸置疑,对于这么重要的一个组件,我们首先要知道这些都是由系统进行管理和回调的,要理解Activity的启动模式,我们首先来了解一下Andro ...

  5. 我所理解的Android 启动模式

    首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景. 任务栈是什么 任务栈Task,是一种用来放置Activity实例的 ...

  6. Android优化—— Google 发布 Android 性能优化典范

    阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...

  7. 【转】Android Canvas绘图详解(图文)

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...

  8. Android系统启动过程-uBoot+Kernel+Android

    摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...

  9. Android架构分析之使用自定义硬件抽象层(HAL)模块

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...

随机推荐

  1. Table里td中的文本过长,设置不换行,随内容同行显示(转载)

    当td中内容过长时,内容会溢出,换行显示,美观超级差,在td里设置这个属性 "white-space:nowrap   就可以解决排版问题啦 <td style="white ...

  2. 【采集层】Kafka 与 Flume 如何选择(转)

    原文链接:[采集层]Kafka 与 Flume 如何选择 采集层 主要可以使用Flume, Kafka两种技术. Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 ...

  3. iOS: iOS各种设备信息获取

    Author:si1ence Link:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述 ...

  4. .NET-MVC站点部署到windows server2008r2服务器404错误

    iis站点搭建 产生原因: 由于服务器上的.net4.0没有进行注册导致的 解决方法: 注册.net 4.0 打开运行-cmd-输入如下命令: C:\WINDOWS\Microsoft.NET\Fra ...

  5. tcp/ip协议中的SYN, ACK的数值变化

    还需要论述一下seq.ack表示什么意思,应该以什么样的角度去理解这两个序列号. sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data st ...

  6. ssh 的安装

    新安装的ubuntu 虚拟机,没有ssh时(ssh 连接不上),时ssh服务没装. 安装openssh-server,就可以. ------------------------------------ ...

  7. Oracle DB 复制数据库

    • 列出创建副本数据库的目的 • 选择用于复制数据库的方法 • 使用RMAN 复制数据库 • 使用RMAN 备份复制数据库 • 基于正在运行的实例复制数据库 使用副本数据库 • 使用副本数据库可执行以 ...

  8. 取石子(六)_nyoj_585(博弈-奇异矩阵).java

    取石子(六) 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3   描述 最近 TopCoder 的 PIAOYI 和 HRDV 很无聊,于是就想了一个游戏,游戏是这样的: ...

  9. java记录linux top命令信息

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  10. Reimplementing event handler

    Events in PyQt4 are processed often by reimplementing event handlers. #!/usr/bin/python # -*- coding ...