西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发Android → Android开发中开始一个Task和BackStack的高级内容

Android开发中开始一个Task和BackStack的高级内容

相关软件相关文章发表评论 来源:承香墨影时间:2013/11/19 8:26:07字体大小:A-A+

作者:承香墨影点击:78次评论:0次标签: Android

欧朋浏览器(Opera Mini)v12.2.0.8官方安卓版
  • 类型:网络浏览大小:3.2M语言:中文 评分:7.1
  • 标签:
立即下载

Android下Activity的启动模式,涉及到了Task和BackStack的内容,对这些不熟悉的朋友,可以先去看看:Android--Activity的启动模式。这篇博客主要讲讲Task和BackStack的高级内容。

本篇文章的内容包括:

开始一个Task

BackStack回退时Activity状态

BackStack的清理

开始一个Task

之前已经了解到,Android的Task通常起始于HOME页面下点击应用程序图标或其在桌面快捷图标。所以我们在开发一个应用程序的时候,需要指定应用程序的入口Activity,通过在AndroidManifest.xml清单文件中某个<Activity/>标签内,使用<intent-filter/>标签内指定。需要设置action为"android.intent.action.MAIN",设置category为"android.intent.category.LAUNCHER"。

1 <activity ... >
2     <intent-filter ... >
3         <action android:name="android.intent.action.MAIN" />
4         <category android:name="android.intent.category.LAUNCHER" />
5     </intent-filter>
6     ...
7 </activity>

这样,当用户点击应用程序图标之后,就会以这个入口Activity为基础,创建一个任务(Task),而这个Activity为这个Task中的第一个Activity,称为根Activity。

BackStack回退时Activity状态

Android中存在多个Task,但是同一时刻只有一个Task被置于前台,其它的均为后台,而后台的Task内的Activity,均为Stopped状态。Android系统中有多种方式切换Task,比如:按HOME键回到桌面、长按HOME键切换到其他Task等。而在同一个Task中,也只有BackStack最上面的Activity处于获得焦点的状态,其它也为Stopped,每当系统需要把Activity置于Stopped时,都会自动保其状态数据,比如:控件输入值、滚动条位置,以便下次获得焦点的时候还原。

但是有一种特殊的情况,对Android系统的内存管理有了解的朋友都应该知道,当系统资源不足的时候,如内存不足,会自动回收一些优先级比较低的组件的线程,以释放资源给新的组件使用。那么就存在问题了,当一个Task被切换到后台之后,如果系统资源告急,自动销毁了某个后台Task中的Activity(除了根Activity外),当用户再次切换回那个Task的时候,BackStack中存在这个Activity的标记,但是内存中已经不存在这个Activity的实例了,这个时候,系统就会通过Bundle来重新创建一个Activity用于还原它,这样保证了用户体验,使用户还是感觉在之前的页面中操作。但是默认情况下,Bundle是不会保存之前Activity中的信息的,比如:控件输入值、滚动条位置。这个时候,如果这个Activity的内容很重要的话,需要我们以编码的方式去保存数据,并在重新创建的时候,以编码的方式还原这个数据。

这个时候就需要用到两个Activity的生命周期方法,onSaveInstanceState()和onRestoreInstanceState()。下面是这两个方法的签名:

protected void onSaveInstanceState(Bundle outState):当Activity被系统回收的时候被调用 ,用这个方法保存Activity中需要保存的数据,存入outState参数即可。

protected void onRestoreInstanceState(Bundle savedInstanceState):当Activity被系统恢复的时候被调用,从Bundle中取出数据,设置会控件中,当然也可以通过重写onCreate()方法来设置数据,因为onCreate()一样可以获取到,但是推荐使用onRestoreInstanceState()。

BackStack的清理

上面描述的Activity被系统回收已经之后在还原的情况,为默认情况。在Android系统的清单文件中,不光为我们提供了设置启动模式的属性android:LauncherMode,还为我们提供了Activity的清理模式,有如下几个:

android:alwaysRetainTaskState:这个属性只对根Activity有效,默认为false,当其设置为true的时候,当这个根Activity失去焦点被置于后台的时候,如不出现意外情况,其中的Activity将不会被系统回收。

android:clearTaskOnTask:这个属性只对根Activity有效,当这个根Activity失去焦点被置于后台的时候,会清理BackStack中根Activity之上的所有Activity,并在下次获得焦点的时候显示根Activity。

android:finishOnTaskLaunch:这个属性只应用于单个Activity,它默认为false,当其设置为true的时候,当前Task如果在这个Activity获得焦点的时候被切换到后台,那么这个Activity直接被销毁,哪怕只是离开一小会儿。

总结

自此就把Task和BackTask的内容介绍完了,把Task和BackStack理解透彻了,对android应用开发有非常好的作用。可以有效提高用户体验,应用中的Activity应该如何显示,应该长存(singleInstance),还是应该阅后即焚(finishOnTaskLaunch),等等场景。一款应用不应仅仅是功能的实现,还需要注重用户体验,它不仅仅是一款应用,而是应该把它当成一款产品来开发。

Android 多线程-----AsyncTask详解

    opera浏览器
    (34)opera浏览器
    目前市场上的安卓浏览器种类繁多,不过有一款浏览器却一直活跃在安卓系统上,那就是欧朋浏览器。欧朋浏览器是全球最流行的手机浏览器的中文版本。欧朋手机浏览器基于开发,延续小巧快速节省流量的优点,同时集成了诸多贴近中国用户的社会化应用。欧朋浏览器最大的特色就是快,与同类产品相比优势比较明显。体积小,适应性好,同时支持智能非智能手机。欧朋浏览器特点欧朋浏览器支持智能预读智能缩放手势操作,外加时尚个性化的界面...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)