`

Android Activity重要性排序

 
阅读更多
在内存不足的时候,Android是会主动清理门户的,那它又是如何判断哪个process是可以清掉的呢?文档中也提到了它的重要性排序:

1.最容易被清掉的是empty process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如Services或者IntentReceiver)与之绑定的进程,也就是说在这个process中没有任何activity或者service之类的东西,它们仅仅是作为一个cache,在启动新的Activity时可以提高速度。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中启动一个Service去执行这些操作。

2.接下来就是background activity了,也就是被stop掉了那些activity所处的process,那些不可见的Activity被清掉的确是安全的,系统维持着一个LRU列表,多个处于background的activity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一个应该是最先被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时的那个Bundle。不过这里有一点不明白的是,难道这个Activity被killed时,Android会帮它保留着这个Bundle吗?

3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不为用户所见,但一般是在处理一些长时间的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。

4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被Paused的Activity也是有可能会被系统清掉,不过相对来说,它已经是处于一个比较安全的位置了。

5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity,也包括那些onReceiveIntent之后的IntentReceiver实例。

在Android Application的生命周期的讨论中,文档也提到了一些需要注意的事项:因为Android应用程序的生存期并不是由应用本身直接控制的,而是由Android系统平台进行管理的,所以,对于我们开发者而言,需要了解不同的组件Activity、Service和IntentReceiver的生命,切记的是:如果组件的选择不当,很有可能系统会杀掉一个正在进行重要工作的进程。
分享到:
评论

相关推荐

    Android自定义控件---联系人列表A-Z排序

    在Android开发中,自定义控件是提升应用用户体验和界面独特性的重要手段。本文将深入探讨如何创建一个自定义的联系人列表,并实现A-Z字母排序功能。首先,我们需要理解Android系统的视图(View)和视图组(ViewGroup)...

    android可拖动排序adapter

    在Android开发中,`Adapter` 是一个至关重要的组件,它作为数据源与用户界面之间的桥梁。`DragSortAdapter` 是一种特殊类型的`Adapter`,它允许用户通过触摸屏幕来直接拖动列表项进行排序,提供了丰富的交互体验。...

    Android-A-ZSort根据字母排序快速定位

    在Android开发中,高效地管理和展示数据是至关重要的。"Android-A-ZSort根据字母排序快速定位"是一个项目,旨在帮助开发者实现对应用中数据的快速查找和定位,特别是在处理大量条目时。这个项目的核心功能是按照字母...

    android 按时间显示图片

    需要注意的是,由于Android设备的多样性和权限管理,访问外部存储可能需要在Manifest.xml中添加`READ_EXTERNAL_STORAGE`权限,并在Android 6.0及以上版本中动态请求权限。同时,为了提高用户体验,图片加载时应考虑...

    Android字母排序 类似通讯录字母检索Demo.zip

    通过理解并实践这个Demo,开发者不仅可以掌握基本的排序技巧,还能深入理解Android界面交互的实现方式,这对于提升应用的易用性至关重要。在实际开发中,可以根据具体需求对这个示例进行扩展和定制,例如支持多语言...

    Sorting-App-Android:Android App对用户输入的数字进行排序

    在Android平台上开发一个排序应用程序,通常涉及到Java编程语言和Android SDK。这个名为"Sorting-App-Android"的应用程序专门设计用于处理用户输入的数字,包括浮点数,并根据用户的需求进行升序或降序排序。此外,...

    带有上下排序箭头的ListView控件

    除了以上步骤,优化ListView的性能也是重要的一环,如使用ViewHolder模式减少视图复用时的查找成本,以及在数据量大时考虑使用Header/Footer机制加载更多数据,避免一次性加载过多数据导致内存压力。 最后,如果...

    【腾讯Bugly干货分享】Android 进程保活招式大全1

    Android将进程分为五个等级,按重要性排序: - **前台进程**:当前用户正在直接交互的进程,如运行中的Activity和前台Service,系统极少见会终止这类进程。 - **可见进程**:虽不处于前台,但对用户可见,如暂停的...

    Android应用管理器

    在Android操作系统中,应用管理器(App Manager)是一款至关重要的工具,它允许用户对设备上的应用程序进行有效的管理和控制。这款应用管理器具有多种实用功能,包括卸载应用、启动应用、查看应用信息以及对应用进行...

    android象棋游戏源码

    在Eclipse-Android环境下,开发者可以使用断点、日志输出(Logcat)和单元测试等工具进行调试,确保游戏运行的稳定性和准确性。 10. **发布与更新** 最后,当游戏开发完成并经过充分测试后,开发者需要打包APK...

    EventBusActivity

    `EventBus`还支持其他高级特性,如粘性事件、优先级排序以及自定义事件分发逻辑,使得它在实际项目中具有很高的灵活性和可扩展性。总之,掌握`EventBus`能帮助开发者编写更加高效、可维护的Android应用程序。

    Android电子书

    以下将详细解析这些电子书中可能涵盖的知识点,以及它们对开发者的重要性。 首先,Android开发电子书通常会涵盖以下几个主要部分: 1. **基础概念**:这部分内容包括Java编程语言的基础,因为Android开发主要基于...

    Android手机管家源码.rar

    在源码中,你会看到诸如Activity、Fragment、Service等Android核心组件的使用,以及对Android SDK的调用,如BroadcastReceiver用于监听系统事件,ContentProvider进行数据共享。 二、内存管理 内存加速是手机管家...

    Android面试复习资料

    以下是对标题和描述中提到的知识点的详细解析,以及它们在面试中的应用和重要性。 1. **J2SE基础**: J2SE(Java Standard Edition)是Java平台的核心部分,为开发桌面应用程序提供了API。面试中可能会涉及以下...

    2023Android安卓期末大作业-纪念日APP

    总之,“纪念日APP”是一个集实用性与技术性于一体的Android期末大作业,它展示了Android开发的魅力,同时也对学生提出了更高的技术要求和创新思维的挑战。在不断迭代和完善的过程中,学生将逐步成长为熟练的Android...

    android-应用管理器的设计与实现

    在Android系统中,应用管理器(App Manager)是至关重要的组件,它允许用户方便地管理和控制设备上的应用程序。本文将深入探讨"android-应用管理器的设计与实现"这一主题,覆盖其核心功能如运行、分享、加锁和卸载,...

    Android应用开发任务管理器源码

    7. **进程排序与筛选**:任务管理器可能会根据不同的标准(如CPU使用率、内存占用、应用重要性等)对进程进行排序,还可能提供筛选选项,如只显示前台应用或系统进程。 8. **终止进程和服务**:用户可能需要结束...

    android面试题整理

    - **四大组件**:Activity、Service、BroadcastReceiver和ContentProvider是Android的核心组件,理解它们的功能和生命周期至关重要。 - **布局管理器**:LinearLayout、RelativeLayout、ConstraintLayout等,以及...

    基于Android的记账本开发与设计 -.doc.zip

    考虑到数据量和复杂性,使用SQLite数据库是最合适的选择,可以存储每笔交易的日期、金额、类别和其他详细信息,并支持查询和排序。 **SQLite数据库** SQLite是一个轻量级的嵌入式数据库,适用于移动应用。开发者...

Global site tag (gtag.js) - Google Analytics