android资源释放
㈠ android开发 怎么释放activity的全部内存
假如现在有三个activity,分别是main,a 和b .
a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过update heap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。
第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。
㈡ 如何清理释放Android手机内存空间
虽然Android 2.2系统开始已经支持Apps2SD功能,但是很多用户使用后发现Android 2.2系统下仍然有很多应用程序无法安装到SD卡,即可程序支持移动到SD卡,但是还会保留一部分系统文件和隐私文件在手机内存里。另外还有一些程序像Widgets,动态壁纸和一些系统程序,如果安装在SD卡根本无法正常工作,内存不足依然是让很多用户感到棘手的问题。 不过Android作为一种优秀的移动操作系统,提供了几种可以清理和释放内存空间的办法,我们总结了下面几点希望可以帮助用户解决燃眉之急。 清理大型应用程序的缓存数据 l 通过清理程序的缓存文件,释放的内存空间会让你喜出望外 l 进入手机设置选项,选择 设置>应用程序 >管理应用程序 l 按一下Menu键,选择“按大小排序”选项(如果是Android 2.2手机先要选择已下载标签),然后就可以按照应用程序大小排列所有手机安装的应用程序 l 点击一款列表中的应用程序,如果程序有缓存文件可以显示大小,直接点击“清除缓存”选项就可以释放这些缓存文件占据的空间 l 有一些应用程序的缓存文件可能多达数MB,比如Google Maps,Market,浏览器和相册程序,清理这几个程序的缓存文件就可以释放相当可观的空间。 l 很多手机厂商都在旗下手机预装了自己开发的UI程序,比如HTC Sense,MOTOBLUR等,如果你打算使用LaunherPro或者ADW这样的launcher程序替代HTC Sense,你可以清理甚至删除HTC Sense的数据文件,这个操作可以让你的手机多出几十MB空间。 l 另外Android Market还提供一些自动清除缓存文件的应用程序,比如Quick App Clean Cache这款收费软件。对于已经取得root权限的手机用户,可以从Market下载 CacheCleaner, CacheMate和MoveCache这些程序来快速方便的清除程序缓存文件。 删除那些你从来不用或者很少使用的应用程序 这是很多用户都会面对的问题,默默忍受着手机内存不足的报警,甚至牺牲系统性能,就是舍不得删除那些从来不用或者极少使用的应用程序,这可能也是一种强迫症。删除这些程序你会发现手机从此海阔天空,而且你没有任何损失。 移动所以可以移动的应用程序数据到SD卡 运行Android 2.2系统的手机支持安装应用程序到SD卡,确保检查所有你安装的应用程序如果支持apps to SD卡功能一定要移动到SD卡,对于一些大型软件特别是游戏程序节省的容量相当可观。不过一定要注意Widgets程序,捆绑Widgets的程序,以及动态壁纸程序和那些需要在后台运行并且和系统进行交互的应用程序不要移动到SD卡存储,否则程序可能无法正常工作。 如果觉得每个程序单独设置太麻烦,可以借助Apps 2 SD和SDMove这样的程序简化操作过程。
㈢ android 怎么释放图片资源
Andorid限制了8M的图片内存,如果超过了就会溢出,那就是要及时释放内存中的图片资源。
我之前的做法是简单对图片对象设置null。其实这样是不行的,图片依然在内存中的。
那如何做更有效呢?
很简单。有代码有真相。
java代码
if(!bitmap.isRecycled()){//先判断图片是否已释放了
bitmap.recycle();
}
㈣ android对应生命周期中应该释放哪些资源
onPause():
当系统调用activity中的onPause(),从技术上讲,意味着activity仍然处于部分可见的状态.但更多时候意味着用户正在离开这个activity,并马上会进入Stopped state. 通常应该在onPause()回调方法里面做以下事情:
停止动画或者是其他正在运行的操作,那些都会导致CPU的浪费. 提交在用户离开时期待保存的内容(例如邮件草稿). 释放系统资源,例如broadcast receivers, sensors (比如GPS), 或者是其他任何会影响到电量的资源。
onResume():
当用户从Paused状态恢复activity时,系统会调用onResume()方法。系统每次调用这个方法时,activity都处于前台,包括第一次创建的时候。所以,应该实现onResume()来初始化那些在onPause方法里面释放掉的组件,并执行那些activity每次进入Resumed state都需要的初始化动作 (例如开始动画与初始化那些只有在获取用户焦点时才需要的组件)
onStop():
当activity调用onStop()方法, activity不再可见,并且应该释放那些不再需要的所有资源。一旦activity停止了,系统会在需要内存空间时摧毁它的实例(和栈结构有关,通常back操作会导致前一个activity被销毁)。极端情况下,系统会直接杀死我们的app进程,并不执行activity的onDestroy()回调方法, 因此我们需要使用onStop()来释放资源,从而避免内存泄漏.
onRestart(),onStart():
当activity从Stopped状态回到前台时,它会调用onRestart().系统再调用onStart()方法,onStart()方法会在每次activity可见时都会被调用。onRestart()方法则是只在activity从stopped状态恢复时才会被调用,因此我们可以使用它来执行一些特殊的恢复(restoration)工作,请注意之前是被stopped而不是destrory。
㈤ android 避免释放内存
Google Android平台在设计程序声明周期上比较特殊,可能是考虑到第二次加载时保证速度的原因而没有强制加入内存释放问题,所有的资源回收由Dalvik GC自动完成,所以在设计开发时一定要注意Activity和 Service类的生命周期问题,显示在最上层的窗口将有最高的优先级,当Android操作系统内存不够用时自动将会根据历史栈按优先级强制杀掉进程。
㈥ 如何管理Android手机的剩余内存
使用android手机的用户可能都安装了任务管理的软件,使用android手机真的有必要安装结束任务的软件吗?大家在使用中也都发现了,很多软件在被结束后,马上就会又出现在任务列表里,或是稍等一会自己也会出现,任务管理不停的结束后台程序,也没见给手机的运行速度带来多少提升,这是为什么呢?
其实大家不用那么在意android手机剩余内存的大小。很多人都是把使用其他系统的习惯带到了android手机上,不是所有的智能手机系统都一样的。android大多数应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来也是android的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。
可能有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。
那么,进程管理软件到底还有存在的价值吗?其实还是有的,在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显着的提高运行速度。但一些小程序,完全可交由系统自己管理。很多朋友还有个疑问,如果不关程序是不是会更耗电?这里也解释一下,android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重新进入,还会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务,服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,名字是service。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢?
还有一点,为什么android应用看起来那么耗内存?大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。
至于为什么开了大程序或者开了好几个程序之后切换会变慢,具体分析如下:
已经开启了一个大程序,占用70%内存,如果再想运行一个程序,此时还需要50%的内存,则就需要一个从大程序占用的内存中释放或者压缩的过程,所以表现出来的就是慢一会儿。
已经开启了几个程序共占用内存80%,运行新程序时又需要20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从之前开启的这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿。也就是说你手动去结束程序的时候,就是替系统在释放内存,就算你不去结束,在需要内存的时候系统也会自动结束程序释放内存。
不在后台运行的程序(没服务的),即使不结束也不会耗电。在后台运行的(有服务的)程序,如一些播放器或实时监控的软件,自然会耗电。这就说明结束进程并不是没用,我们只需要看哪个带服务耗电哪个程序后台一直在运行,看服务就能看出来,这样的软件如果用不到的时候就结束了吧。
以QQ举例,正常的退出,会在进程管理里留下qq的运行过的状态,但不耗电不占 cpu,如果你只是切换出去(按房子键而不是退出)那么自然会耗电,因为程序还在运行,QQ还在线呢。
这里就有个要注意的地方了,虽然房子键和那个返回键都可以将程序切换出去,但是两者的效果差异是很大的,返回键可以视作程序已经退出了,而按房子键,则是将程序切换到了后台来运行,软件并没有退出哦!
以上这些设计都是为了确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,得不偿失。大家不妨换种观念习惯来使用android系统。
㈦ 如何有效的清除Android中无用的资源
你好,
使用lint扫描出项目中的无用,重复,版本不合理等资源,这里只处理图片,layout,menu资源也就是对应lint结果的UnusedResources,然后过滤出UnusedResources资源,对资源按照项目目录备份一份(防止误删,方便恢复),然后删除。被删除的内容,使用对象保存到outData.txt中,方便查阅。这里使用Android studio 的lint插件为例(扫描结果有清晰整洁的xml结构,方便数据处理)。步骤:1.启动Android studio,使用lint模式运行目标Android项目点击运行2.自动生成lint-result.xml文件,目录:项目路径\build\outputs\lint-result.xml3.配置白名单whitelist.txt,过滤掉不需要删去的文件4.点击file文件下的autoCleaner.exe,选择lint-result.xml及其选择要清理的资源5.确定清理,被清理掉的文件备份到file\file\项目原路径下,被清理掉的文件信息以对象形式保存在outResObj.txt
6.完成 被删去的文件按照原目录备份
㈧ Android 在程序运行时,有若干个activity,怎么在退出这个Activity是,释放掉它所占用的运行空间
你每次退出activity的时候调用finish()稍后会自动清理释放内存的,你可以直接在activity的onStop方法里面写这个方法,这样当界面不可见的时候就会自动finish了
你可以在你的Manifest里面的application中加
android:largeHeap="true"
android:hardwareAccelerated="true"
这样系统就会分配更大的内存给你了