退出但不关闭:
这是Android对于Linux的优化。当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。
应用切换到后台是暂停的,完全不耗cpu和电量,只保留了运行状态。如果app需要后台处理事务(放音乐),那么app进程会开启相应的服务,所以在后台有消耗的只有服务。
占用CPU的应用才耗电,后台的只占内存,所以是不耗电的。
回收优先级:
Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级:
IMPORTANCE_FOREGROUND:前台进程,目前正在屏幕上显示的进程和一些系统进程。
IMPORTANCE_VISIBLE:可见进程,可见进程是一些不再前台,但用户依然可见的进程,比如输入法、天气、时钟等。
IMPORTANCE_SERVICE:服务进程,拨号、邮件存储之类的。
IMPORTANCE_BACKGROUND:后台进程,启动后被切换到后台的进程。
IMPORTANCE_EMPTY:没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是 提高该程序下次的启动速度或者记录程序的一些历史信息。
对Android内存泄露业界已经有很多优秀的组件其中LeakCanary最为知名
Android常见内存问题
1. 内存泄露
不止Android程序员,内存泄露应该是大部分程序员都遇到过的问题,可以说大部分的内存问题都是内存泄露导致的,这里简单罗列下:
单例(主要原因还是因为一般情况下单例都是全局的,有时候会引用一些实际生命周期比较短的变量,导致其无法释放)
静态变量(同样也是因为生命周期比较长)
Handler内存泄露[7]
匿名内部类(匿名内部类会引用外部类,导致无法释放,比如各种回调)
资源使用完未关闭(BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap)
原文:https://blog.csdn.net/a15838319826/article/details/72239149
版权声明:本文为博主原创文章,转载请附上博文链接!