Activity 的 36 大难点,你会几个?「建议收藏」 (7)

后台进程是一个保持着一个当前对用户不可视的活动(已经调用 Activity 对象的 onStop() 方法)(如果还有除了 UI 线程外其他线程在运行话,不受影响)。

例如我正在使用 qq 和别人聊天,这个时候 qq 是前台进程,但是当我点击 Home 键让 qq 界面消失的时候,这个时候它就转换成了后台进程。

这些进程没有直接影响用户体验,并且可以在任何时候被杀以收回内存用于一个前台、可视、服务进程。

一般地有很多后台进程运行着,因此它们保持在一个 LRU( least recently used ,即最近最少使用,如果您学过操作系统的话会觉得它很熟悉,跟内存的页面置换算法 LRU 一样)列表以确保最近使用最多的活动的进程最后被杀。

5.5 空进程

空进程

空进程是一个没有保持活跃的应用程序组件的进程,不包含任何活跃组件。

保持这个进程可用的唯一原因是作为一个 cache 以提高下次启动组件的速度。系统进程杀死这些进程,以在进程 cache 和潜在的内核 cache 之间平衡整个系统资源。

android 进程的回收顺序从先到后分别是:空进程,后台进程,服务进程,可见进程,前台进程。

5.6 什么是 ANR,如何避免

什么是 ANR,如何避免

5.6.1 什么是ANR

什么是ANR

ANR ,全称为 Application Not Responding 。

在 Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。

5.6.2 用户行为

用户行为

用户可以选择让程序继续运行,也可以让程序停止运行。

他们在使用你的应用程序时,并不希望每次都要处理这个对话框。

因此,在程序里对响应性能的设计很重要,这样,系统不会显示 ANR 给用户。

5.6.3 Android不同组件ANR超时时间不同

Android不同组件ANR超时时间不同

不同的组件发生 ANR 的时间不一样,主线程( Activity 、Service )是 5 秒,BroadCastReceiver 是 10 秒。

5.6.4 解决方案

解决方案

将所有耗时操作,比如访问网络,Socket 通信,查询大量 SQL 语句,复杂逻辑计算等都放在子线程中去,然后通过 handler.sendMessage 、runonUITread 、AsyncTask 等方式更新 UI ,以确保用户界面操作的流畅度。

如果耗时操作需要让用户等待,那么可以在界面上显示进度条。

5.7 android的任务栈 Task

android的任务栈 Task

一个 Task 包含的就是 activity 集合,android 系统可以通过任务栈有序的管理 activity

一个app当中可能不止一个任务栈,在某些情况下,一个 activity 也可以独享一个任务栈( singleInstance 模式启动的 activity )

# 总结

本文基本涵盖了 Android Activity 的所有知识点。对于 App 启动、AMS 希望大家能根据文中链接或者 Google 搜索的形式继续展开学习。

重点:关于 Android 的四大组件,到现在为止我才总结完 Activity ,马上我将继续针对,Service ,BroadcastRecevier 等,以及事件分发、滑动冲突、新能优化等重要模块,进行全面总结,欢迎大家关注 _yuanhao 的 博客园 ,方便及时接收更新

码字不易,你的点赞是我总结的最大动力!

由于我在「稀土掘金」「简书」「CSDN」「博客园」等站点,都有新内容发布。所以大家可以直接关注我的 GitHub 仓库,以免错过精彩内容!

仓库地址:
超级干货!精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star !

一万多字长文,加上精美思维导图,记得点赞哦,欢迎关注 _yuanhao 的 博客园 ,我们下篇文章见!

Android

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxfgy.html