2019独角兽企业重金招聘Python工程师标准>>>

最近这段时间一直在研究做手机应用开发的时候遇上android内存清理的问题,看很多的资料,也尝试了很多方法,不过都没有用,后来不断的摸索终于整出来,以下特意总结了一下内存清理的方法,可以将那些无用的进程给shut down掉,上代码~

1  protected void onClearMemory(Context context) {

2    ActivityManager activityManger = (ActivityManager) context

3            .getSystemService(Context.ACTIVITY_SERVICE);

4    List<ActivityManager.RunningAppProcessInfo> list = activityManger

5            .getRunningAppProcesses();

6    if (list != null)

7        for (int i = 0; i < list.size(); i++) {

8            ActivityManager.RunningAppProcessInfo apinfo = list.get(i)

9

10            String[] pkgList = apinfo.pkgList;

11

12            if (apinfo.importance >=

13  ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

14

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

16

17                    if (pkgList[j].equals(context.getPackageName())) {

18                       continue;

19                    }

20

21                    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO) {

22                        activityManger.restartPackage(pkgList[j]);

23                    } else {

24                        activityManger.killBackgroundProcesses(pkgList[j]);

25                    }

26                }

27            }

28        }

29

30    new AlertDialog.Builder(SettingActivity.this)

31    .setTitle("请注意")

32    .setMessage("内存清理完毕")

33    .setPositiveButton("确定", null)

34    .show();

35

36  }

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" />

另外推荐一款小编经常用的APP在线测试工具:www.ineice.com

转载于:https://my.oschina.net/u/2455226/blog/504258

浅谈:Android应用清理内存相关推荐

  1. android 存储空间监控,浅谈 Android 内存监控(中)

    前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...

  2. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

  3. 《浅谈-Android系统越用反应越慢的问题》

    <浅谈-Android系统越用反应越慢的问题> android应用程序和iphone应用程序不一样,用过iphone的都知道,点击图标进入程序后,如果还想用其他程序,必须先按返回退出然后进 ...

  4. 浅谈Android Architecture Components

    浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...

  5. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  6. 浅谈Android文件管理器的几种实现方式(原理篇)--对我有帮助

    转自 https://blog.csdn.net/weixin_33698823/article/details/87269955 浅谈Android文件管理器的几种实现方式 为了完成毕业设计,我花费 ...

  7. 浅谈Android引用计数(2)

    在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用. 下面是RefBase和相关类的类图: 图中可 ...

  8. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  9. android fps 垂直同步,浅谈Android流畅度

    原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...

  10. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

最新文章

  1. 进程程序替换(自主实现shell)
  2. FCC有意支持Sprint与T-Mobile合并?
  3. 第三十三讲:tapestry Ajax eventlink无刷新页面
  4. cmake使用示例与整理总结
  5. 【2021最新版】如何clean或者install Maven项目——IntelliJ IDEA系列教程
  6. kotlin获取属性_Kotlin程序获取系统MAC地址
  7. metinfo mysql_Metinfo 5.3.17 前台SQL注入漏洞
  8. 带你入门SpringCloud统一配置 | SpringCloud Config
  9. TF2—tf.keras.layers.BatchNormalization
  10. (原)logstash-forwarder + logstash + elasticsearch + kibana
  11. Java 操作Word书签(二):添加文本、图片、表格到书签内容
  12. sw与matlab连接_solidworks与matlab联合仿真simMechnics下载及安装
  13. 常用开关稳压电源(LM2596、MC3406)
  14. 错误 请再次按下快门释放按钮
  15. 如何利用wordpress搭建一个免费博客
  16. 大数据如何赋能产品—用户特征分析
  17. Unity UGUI 图文混排
  18. Linux笔记本电脑大调查:程序员最喜欢的电脑是什么配置?
  19. Window XP驱动开发(二) 环境搭建(VS2008+WDK+DDKWzard)及示例源码分析
  20. C语言爱因斯坦的数学游戏,C语言实例 爱因斯坦的数学题

热门文章

  1. 1.2.3 Using Option Files
  2. 使用Eclipse构建Maven的SpringMVC项目
  3. Apache Tomcat 5.5 Servlet/JSP 容器
  4. Tomcat 6 数据源配置
  5. 都是套路:高并发系统的降级特技
  6. SMTP Error: Could not connect to SMTP host
  7. Normal Vector Using WorldInverseTranspose
  8. POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)
  9. 也谈ASP.NET页面事件
  10. android 取消点击GridView的时候出现的那个黄色背景