`
吃货吃货
  • 浏览: 32057 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android应用清理内存

阅读更多

Android应用清理内存

    最近这段时间在做手机应用开发的时候遇上android内存清理的问题,一直在网上查找各种资料,不过尝试了很多方法都没有用,最后在GitHub的帮助下也算是完成了,以下特意总结了一下内存清理的方法,可以将那些无用的进程给shut down掉,上代码~

protected void onClearMemory(Context context) {
		ActivityManager activityManger = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<ActivityManager.RunningAppProcessInfo> list = activityManger
				.getRunningAppProcesses();
		if (list != null)
			for (int i = 0; i < list.size(); i++) {
				ActivityManager.RunningAppProcessInfo apinfo = list.get(i);

				String[] pkgList = apinfo.pkgList;
				
				if (apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

					for (int j = 0; j < pkgList.length; j++) {

						if (pkgList[j].equals(context.getPackageName())) {
							continue;
						}

						if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO) {
							activityManger.restartPackage(pkgList[j]);
						} else {
							activityManger.killBackgroundProcesses(pkgList[j]);
						}
					}
				}
			}
        
        new AlertDialog.Builder(SettingActivity.this)
        .setTitle("请注意")
        .setMessage("内存清理完毕")
        .setPositiveButton("确定", null)
        .show();
        
	}

   getRunningAppProcesses():得到那些正在运行的进程;

RunningAppProcessInfo:得到正在进行的进程信息;

Importance:在android中分为几个级别

1、IMPORTANCE_FOREGROUND前台进程
所谓前台进程就是指用户完成当前工作而需要的进程。判断条件如下(满足其一即可):
-进程中的某个Activity正在与用户进行交互(Activity的onResume()方法被调用)
-绑定到与当前用户正在交互的activity的Service所在的进程
-进程中的某个Service正运行在前台,即这个service的startForeground()方法被调用
-进程中的某个Service正在执行生命周期回调方法(比如,onCreate(),onStart(),或者onDeatroy())
-进程中的BroadcastReceiver正在执行onReceive()方法。
一般来说的话,在某特定时刻,也仅会有为数不多的几个前台进程。这些前台进程的重要性最高,当系统内存低到很低,以致不能继续运行这些所有的进程的话,系统将会杀死这些进程。这种情况下,一般是指系统已经到了一个极限边缘了,所以为了让UI继续有反应的话,系统不得不杀死一些前台进程

2、IMPORTANCE_VISIBLE 可视进程

可视进程是指没有前台运行的组件,但仍然会对用户在屏幕看到的内容造成影响的进程。满足下面条件的进程都可以算作可视进程:
-进程运行的Activity不在前台,但仍然是可见的(调用了onPause()方法)。这种情况可能是这样的,正在前台运行的Activity启动了一个对话框,这个对话框悬浮在这个activity之上,但仍有部分可见。
-进程中的Service绑定到了一个可视(或前台)的activity(该activity已调用了onPause()方法)。
可视进程也是有着极高重要性的进程,只有在系统为了保持前台进程运行而不得不杀死可视进程的时候,才会杀死可视进程

3、IMPORTANCE_SERVICE 服务进程

所谓的服务进程,就是指除了上面两种进程外,如果一个进程已经通过startService()方法启动了一个service的进程。虽然这种service进程跟用户的看到的内容不相关,但它们所做的工作也是用户关心的(比如在后台播放音乐或者正在下载互联网上的资源),系统会一直保持服务进程,除非系统为了前台进程和可视进程的运行,而不得不杀死服务进程

4、IMPORTANCE_BACKGROUND 后台进程

后台进程是指进程中的activity当前对用户来说不可见(这个activity调用了onStop()方法)。后台进程不会对用户的体验造成任何影响,并且系统可以在前台进程、可视进程、服务继承需要内存资源的时候会杀死后台进程。通常会有很多后台进程运行,并且这些后台进程保存在一个最近使用列表中,这样做的好处就是保证用户最近看到的进程最后被杀死。如果一个activity已经正确的实现了生命周期方法,并且保存了当前的状态,那么系统杀死这些后台进程对用户的可视效果来说的话,没有任何影响,因为当用户返回回来的时候,这个activity已经保存了所有的可视状态

5、IMPORTANCE_EMPTY空进程

一个空进程没有任何运行的程序组件。系统保持空进程存在的唯一原因就是为了缓存方面的考虑,这样做主要是为了提高组件的启动时间。系统经常会杀死这些空进程来保持整个系统资源和内核缓存之间的平衡。

由此可见,importance数值越低级别越重要,因此我们可以根据自己的需要来判断不同的级别。

2.2版本以下的用activityManger.restartPackage(pkgList[j]); 对应权限<uses-permission android:name="android.permission.RESTART_PACKAGES" />
2.2以上的用killBackgroundProcesses(包名); 对应权限<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

 

1
2
分享到:
评论

相关推荐

    Android代码-安卓内存清理 改进版

    安卓手机内存清理 开源版,包括内存加速,垃圾清理,自启管理,软件管理等。 说明 &gt;现修复android5.0以上不能查看进程的问题,暂时不能支持7.0的查看进程的功能,欢迎各位提出相应的意见或建议,如不能配置好环境,...

    Android 一键加速(内存清理、缓存清理) 源码

    http://download.csdn.net/detail/yyh352091626/9196107 基于 LeBron_Six 源码修改,先前的代码只能在Android studio上运行,这几天发了点时间移植到eclipse ,只留下了内存清理和缓存清理。其他的都屏蔽了,如果需要...

    Android应用源码一键清理内存缓存加速自启管理软件管理

    实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件管理、设备信息等。项目用到的开源项目有:Open source projects、ButterKnife、changelog、smoothprogressbar、ListViewAnimations、LDrawer、...

    基于android的应用内存统计.zip

    针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也...

    Android实现清除应用缓存功能

    本文实例为大家分享了Android清除应用缓存的具体代码,供大家参考,具体内容如下 import android.content.Context; import android.os.Environment; import java.io.File; import java.math.BigDecimal; /** * ...

    Android获取第三方应用的占用大小,包括缓存、数据、应用大小

    Android通过IPackageStatsObserver.aidl 、PackageStats.aidl两个AIDL文件获取第三方应用的占用大小,包括缓存、数据、应用大小,经验证和手机设置里面显示的大小完全一致。。。。。。如果还需要其他比如清除缓存之...

    手机清理和内存加速:Phone Clean

    手机清理和内存加速,是一个免费的应用程序,可以帮助清除多余的应用程序和文件,释放存储空间,清理内存,加快您的Android设备。 只需要几秒钟,您的手机将运行得更快! 手机清理亮点: ☆ 方便: 优化您的Android...

    Android内存泄露分析.pptx

    在android开发中,jvm具有自动回收的机制,会不定时不定期的去清理无用的被占用的内存,而在理论上不需要再被使用的内存,在实际中却还持有对这一块内存的引用,导致GC时,不会被回收释放掉,这部分内存就会随着程序...

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    Android实现仿360桌面悬浮清理内存

    今天闲来无事写了一个清内存的小东西,类似360,在桌面上悬浮,点击后清除后台无用程序,清除后台程序是通过调用ActivityManger.killBackgroundProcesses的方式来进行的,这样的方式有个不好的地方,就是重要性级别...

    android 任务管理器

    可以实时查看手机运行时的CPU利用率、内存利用率、已使用内存、可用内存、总内存 4. 视图切换 可以选择以列表或网格的形式进行浏览 5. 甩动杀死后台进程、一键杀死后台进程 甩动手机,当达到一定速度时进行后台...

    Android清空应用内部文件缓存

    Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用内部缓存...

    Android通过全局变量传递数据

    除非是Web服务器停止 Android中的全局对象非常类似于Java Web中的Application域 除非是Android应用程序清除内存 否则全局对象将一直可以访问 1 定义一个类继承Application public class MyApp extends ...

    Android多功能工具箱

    这种工具箱通常提供了直观友好的用户界面,使用户能够方便地访问各种功能模块,进行文件浏览、内存清理、应用管理等操作。此外,一些高级的工具箱还可能提供了系统优化、安全检测、隐私保护等功能,帮助用户更全面地...

    安卓系统优化清理工具 NoxCleaner 2.2.9 中文免费版.zip

    NoxCleaner 中文解锁版是 Android 上最佳的清理应用程序之一,包括垃圾清理、内存加速、CPU 降温、应用管理器以及照片管理,可优化你的 Android 设备性能。NoxCleaner 是您清理垃圾缓存、手机提速、提高设备性能及...

    应用程序限制器 - App Restriction v2.6.0

    App Restriction是一款可以定期清理后台应用,释放内存,节省电池电量的系统清理优化神器。 现在的流氓应用越来越多,动不动就常驻后台,杀还杀不掉,消耗内存,消耗电池。 这个工具专杀流氓应用,并且定期清理它们...

    Speed_Cleaner_v1.4.7.apk

    病毒清除程序– android防病毒软件提供免费的防病毒保护,加快电话速度,清理病毒,清除垃圾文件,冷却CPU,优化内存,长时间节省电池电量并释放内存。 超级杀毒软件,杀毒软件2018 – MAX,最适合Android手机的...

Global site tag (gtag.js) - Google Analytics