`
吃货吃货
  • 浏览: 33018 次
  • 性别: 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应用内存监控工具

    在Android应用开发中,内存管理是一项至关重要的任务,因为它直接影响到应用的性能、稳定性和用户体验。内存监控工具能够帮助开发者检测和分析应用的内存使用情况,预防和解决内存泄漏等问题。"Emmagee.apk"可能是一...

    清理释放Android 安卓手机内存空间方法教程

    ### 清理释放Android安卓手机内存空间方法教程 在日常使用Android手机的过程中,经常会遇到手机运行变慢、存储空间不足等问题。这些问题往往与手机内存管理不当有关。本文将详细介绍如何有效地清理并释放Android...

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

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

    使用Android Studio检测内存泄露(LeakCanary)

    内存泄露在Android开发中是一个非常重要的问题,因为它可能导致应用程序运行缓慢、消耗过多资源甚至崩溃。Android Studio提供了多种工具帮助开发者检测和解决内存泄露,其中包括Memory Profiler和LeakCanary。 ...

    Android一键清理后台实现

    在Android平台上,开发一款“一键清理后台”应用可以帮助用户快速释放设备内存,提高系统运行速度。这个功能通常包括清理正在运行的应用程序、终止不必要的服务以及管理后台进程。下面将详细介绍如何在Android 4.4...

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

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

    纪喜才:Android应用程序内存管理优化.pptx

    内存优化是Android应用程序开发中的关键环节,因为它直接影响到应用的性能、用户体验以及系统的稳定性。本文将深入探讨Android应用程序内存管理优化的相关知识点。 首先,我们理解内存优化的重要性。Android系统为...

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

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

    Android调用C++实现共享内存

    Android NDK(Native Development Kit)提供了一个平台,开发者可以在Android应用中使用C++代码。NDK包含了一系列工具,如编译器、链接器和调试器,用于构建原生库,这些库可以被Java代码调用。 共享内存的实现通常...

    android系统分析内存泄露测试

    在Java(Android的主要编程语言)中,垃圾回收机制会自动清理不再使用的对象,但当一个对象被静态变量、单例模式或者非静态内部类的匿名内部类引用时,垃圾回收器就无法识别这些对象是否还在使用,从而导致内存泄漏...

    Android app缓存清理实现

    在Android应用开发中,缓存管理是至关重要的一个环节,它关系到应用的性能、内存使用以及用户体验。本文将深入探讨如何实现Android app的缓存清理,并基于提供的"CacheClear"压缩包文件,讲解如何封装一个获取和清理...

    Android应用程序中的内存泄漏与规避方法

    ### Android应用程序中的内存泄漏与规避方法 #### 引言 在Android应用程序开发中,内存管理是一个不容忽视的关键环节。由于Android应用主要采用Java语言编写,Java的垃圾回收机制(Garbage Collection, GC)使得...

    Android应用缓存机制

    总之,Android应用缓存机制涉及多方面,合理的缓存策略能够显著提升应用性能,降低数据传输成本,同时需要注意内存管理和存储效率,确保应用的稳定性和用户体验。开发者应根据实际需求选择合适的缓存方式,并持续...

    Android应用源码之防止内存溢出浅析.zip

    在Android应用开发中,内存管理是一项至关重要的任务。内存溢出(Out of Memory,简称OOM)是Android开发者经常面临的问题,它可能导致应用崩溃或者性能下降。本资料"Android应用源码之防止内存溢出浅析"正是针对这...

    android实现火箭动画清理内存

    "android实现火箭动画清理内存"这个主题就是关于如何在Android应用程序中结合火箭动画来模拟一个内存清理的过程,从而为用户提供一种直观且有趣的交互方式。在这个过程中,我们将深入探讨`Animation`类和`...

    Android-一键清理开源版包括内存加速缓存清理自启管理软件管理等。

    在Android平台上,开发一款名为"superCleanMaster"的一键清理工具是常见的实践,它整合了多项功能以优化设备性能,如内存加速、缓存清理、自启动管理以及软件管理。这款开源版本允许开发者深入理解其内部工作原理,...

    android获取SDcard内存空间

    在Android系统中,获取SD卡(外部存储)的内存空间信息是开发者经常遇到的需求,这有助于监控应用的存储使用情况,防止因存储不足导致的问题。...这些知识对于任何涉及存储管理的Android应用都是必不可少的。

    Android内存泄漏简介

    总之,虽然Java的垃圾回收机制为内存管理提供了一定的便利,但Android应用开发者仍然需要注意正确管理内存,以避免内存泄漏的发生。通过学习和实践上述知识点,开发者可以提高编写高效且稳定的应用程序的能力。

    ANDROID 应用完全退出

    本文将探讨如何在Android应用中实现完全退出,以及解决引用Context未释放导致的OOM(Out of Memory)问题。 首先,理解Android应用的生命周期至关重要。在Android中,应用通常不会被完全关闭,而是进入后台状态,...

Global site tag (gtag.js) - Google Analytics