如何控制应用程序使用的内存

本文介绍如何优化Android应用的内存使用,包括适时释放资源、合理利用IntentService、响应内存紧张信号及确定合理的内存占用等策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.记得关闭启动的服务
                                    
                                          当服务中的任务完成后,要记得停止该服务,可以考虑使用IntentService,
                                          因为IntentService 在完成任务后会自动停止
                                    
                                        2.UI不可见时释放资源
                                    
                                          ①在onStop()中关闭网络连接、注销广播接收器、释放传感器等资源
                                          ②在onTrimMemory() 回调方法中监听TRIM_MEMORY_UI_HIDDEN 级别的信
                                           号,此时可在 Activity 中释放 UI 使用的资源,大符减少应用占用的内存
                                           从而避免被系统清除出内存
                                    
                                        3.内存紧张时释放资源
                                          
                                          运行中的程序,如果内存紧张,会在 onTrimMemory(int level) 回调方法
                                          中接收到以下级别的信号:
                                    
                                    
                                            TRIM_MEMORY_RUNNING_MODERATE:系统可用内存较低,正在杀掉 LRU缓
                                            存中的进程,你的进程正在运行,没有被杀掉的危险
                                    
                                            TRIM_MEMORY_RUNNING_LOW:系统可用内存更加紧张,程序虽然暂没有被
                                            杀死的危险,但是应该尽量释放一些资源,以提升系统的性能(这也会直接
                                            影响你程序的性能)
                                            
                                            TRIM_MEMORY_RUNNING_CRITICAL:系统内存极度紧张,而LRU缓存中的
                                            大部分进程已被杀死,如果仍然无法获得足够的资源的话,接下来会清理掉 
                                            LRU 中的所有进程,并且开始杀死一些系统通常会保留的进程,比如后台运
                                            行的服务等
                                    
                                    
                                          当程序未在运行,保留在 LRU 缓存中时, onTrimMemory(int level) 中
                                          会返回以下级别的信号:
                                    
                                    
                                            TRIM_MEMORY_BACKGROUND:系统可用内存低,而你的程序处在LRU的顶端
                                            端因此暂时不会被杀死,但是此时应释放一些程序再次打开时比较容易恢复
                                            的UI资源
                                    
                                            TRIM_MEMORY_MODERATE:系统可用内存低,程序处于 LRU的中部位置,
                                            如果内存状态得不到缓解,程序会有被杀死的可能
                                    
                                            TRIM_MEMORY_COMPLETE:系统可用内存低,你的程序处于LRU尾部,如果
                                            系统仍然无法回收足够的内存资源,你的程序将首先被杀死。此时应释放无
                                            助于恢复程序状态的所有资源
                                            注:该API在版本 14 中加入。旧版本的onLowMemory()方法,大致相当于
                                            onTrimMemory(int level)中接收到 TRIM_MEMORY_COMPLETE 级别的
                                            信号。
                                            另:尽管系统主要按照 LRU 中顺序来杀进程,不过系统也会考虑程序占用
                                            的内存多少,那些占用内存高的进程有更高的可能性会被首先杀死。
                                    
                                        4.确定你的程序应该占用多少内存
                                    
                                          可以通过getMemoryClass()来获取你的程序被分配的可用内存,以M为单位
                                    
                                          可以通过在 <application> 标签下将 largeHeap 属性设为 true 来要求
                                          更多的内存,这时通过 getLargeMemoryClass() 方法来获取可用内存
                                    
                                          大部分应用程序不需要使用此功能,因此使用该标签前,确认你的程序是否真
                                          的需要更多内存。使用更多内存会对整个系统的性能产生影响,而且当程序进
                                          入LRU时会更容易首先被系统清理掉
                                        
                                        5.正确使用 Bipmap,避免浪费内存
                                        
                                        6.使用ProGuard
                                    
                                          使用 ProGuard 移除无用的代码并重命名一些类、字段、方法等,使你的代码
                                          更紧凑,节省内存空间
                                    
                                        7.使用 zipalign
                                    
                                          zipaligned 对最终打包的 apk进行字节对齐
                                          注:Google Play 不接受未对齐过的apk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值