【Android】15.1 后台任务和前台任务
分类: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 后台任务和前台任务的更多相关文章
- 优化 Android 线程和后台任务开发
在 Android 开发中,你不应该做任何阻碍主线程的事情.但这究竟意味着什么呢?在这次海湾 Android 开发者大会讲座中,Ari Lacenski 认为对于长时间运行或潜在的复杂任务要特别小心. ...
- Android开发_后台任务task管理_allowTaskReparenting alwaysRetainTaskState clearTaskOn
1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“tru ...
- android 15 activity跳转
从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ...
- Android开发艺术2之Activity的启动模式
Activity是Android的四大组件之一,他的重要性毋庸置疑,对于这么重要的一个组件,我们首先要知道这些都是由系统进行管理和回调的,要理解Activity的启动模式,我们首先来了解一下Andro ...
- 我所理解的Android 启动模式
首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景. 任务栈是什么 任务栈Task,是一种用来放置Activity实例的 ...
- Android优化—— Google 发布 Android 性能优化典范
阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...
- 【转】Android Canvas绘图详解(图文)
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...
- Android系统启动过程-uBoot+Kernel+Android
摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...
- Android架构分析之使用自定义硬件抽象层(HAL)模块
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...
随机推荐
- 更改Thunderbird的默认语言
使用的Thunderbird Poratable版本是英文的,可以用以下方式修改为中文界面: 1.下载中文语言包 在官方网站的https://addons.mozilla.org/en-US/thun ...
- 用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
Click here for a newer version (Knet7) of this tutorial. The code used in this version (KUnet) has b ...
- go语言基础之不同目录
1.不同目录 不同目录,包名不一样 调用不同包里面的函数,格式:包名,函数名() 调用别的包的函数,这个包函数名字如果是小写,无法让别人调用,要想别人能调用,必须首字母大写. 需要配置环境变量 临时配 ...
- Django安装和配置环境变量
一.windows系统安装Django 1.先安装python2.x or 3.x软件.(记得勾选pip3和添加python自己的环境变量) 下载地址:http://www.python.org/ 2 ...
- C++如何禁止掉对象的复制操作
最容易想到的是将拷贝构造函数与赋值函数声明为private.但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数与友元函数对其访问.那么怎么办呢? ---->在类中,允许声明 ...
- 【算法】Logistic regression (逻辑回归) 概述
Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等 ...
- Hibernate之一对一关联映射
Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射.下面简单介绍一下这两种关联映射. 一对一主键关联映射 一对一主键关联映射的两个实体有相同的ID. ...
- 开源力量:微软竟开源 PowerShell
导读 曾经有段时间,微软称 Linux 是“癌症”,但是随着时光流逝,现在微软已经认识到了开源世界的不断增长,除了在这个领域加大投入之外别无选择.微软已经启动了几个开源项目,希望能吸引一些 Linux ...
- 浅析JDK中ServiceLoader的源码
前提 紧接着上一篇<通过源码浅析JDK中的资源加载>,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介 ...
- npm发包流程
1.注册npm 账号 https://www.npmjs.com/signup 2.初始化npm项目 npm init 根据发的包进行填写: { "name": "wen ...