分类: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. 2014 百度之星 题解 1004 Labyrinth

    Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...

  2. ssh 远程登陆指定端口

    ssh 到指定端口  ssh -p xx user@ip      xx 为 端口号    user为用户名   ip为要登陆的ip SSH 原理及远程登录 http://www.ruanyifeng ...

  3. Andorid之Annotation框架初使用(三)

    线程使用: @Background这个是使用了cached thread pool executor , 阻止开启过多的线程 可以为@Background指定一个id,用于随时终止线程的操作(Back ...

  4. Python学习(七)面向对象 ——封装

    Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...

  5. sqlserver 汉字转拼音

    作者不详       --方法一sqlserver汉字转拼音首字母 --调用方法 select dbo.procGetPY ('中國') Create FUNCTION dbo.procGetPY ( ...

  6. DICOMDIR

    DICOMDIR 是一个可变长度 迷你 database 文件.由 group (0002, xxxx) 和 group (0004, xxxx) 为主题.描述的是一个 4 层的树状结构 (tree ...

  7. leetcode mock Shuffle an Array

    1. shuffle算法: http://www.cnblogs.com/huaping-audio/archive/2008/09/09/1287985.html 注意:我们一般用的是第二种swap ...

  8. ansible安装文档

    一.系统环境 [root@ansible ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@ansible ~]# uname ...

  9. Java import javax.servlet 出错

    Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...

  10. with(nolock)解释

    摘自: http://blog.sina.com.cn/s/blog_5fafba5e010113kr.html with(nolock)解释   所有Select加 With (NoLock)解决阻 ...