android的进程_android 关闭其他的进程 - CSDN
精华内容
参与话题
  • android查看当前手机中的进程

    万次阅读 多人点赞 2019-09-29 13:06:12
    正常情况下,每一个Android应用启动后都会对应一个进程,当前越来越多应用会有多个进程,为了推送,为了内存,或者为了保活。如何查看应用进程呢。1.DOS下面cmd,然后打开adb shell,直接ps命令,显示当前手机所有...

    正常情况下,每一个Android应用启动后都会对应一个进程,当前越来越多应用会有多个进程,为了推送,为了内存,或者为了保活。如何查看应用进程呢。


    1.DOS下面cmd,然后打开adb shell,直接ps命令,显示当前手机所有进程,如图所示:

    这里写图片描述
    这里写图片描述

    2.利用(ps|grep 条目名称)命令,过滤自己需要的进程,比如列出条目里含有tencent字符的进程(包名里面含有该字符),则输入ps|grep tencent,如图所示则,QQ包含的进程下面几个:

    这里写图片描述

    各列参数意义:

    USER 进程当前用户;

    PID Process ID,进程ID;

    PPID Process Parent ID,进程的父进程ID;

    VSIZE Virtual Size,进程的虚拟内存大小;

    RSS Resident Set Size,实际驻留"在内存中"的内存大小;

    WCHAN 休眠进程在内核中的地址;

    PC Program Counter;

    NAME 进程名;

    3.还有比较重要的两个是进程的Importance等级以及adj值,关于这两个定义大家可以不必深究,但是要有一定的理解,这两个玩意是具体决定了系统在资源吃紧的情况下该杀掉哪些进程。通过cat /proc/进程id/oom_adj可以看到当前进程的adj指,比如输入cat /proc/32366/oom_adj

    这里写图片描述
    cat查看进程的adj值后我们会得到其返回结果“0”,说明当前进程正位于前台,因为我的手机qq是打开的。
    同样,我按home键,把qq退到后台,这个时候,再输入cat /proc/32366/oom_adj,则如下结果
    这里写图片描述

    而adj值则在ProcessList中定义:

    final class ProcessList {
    // OOM adjustments for processes in various states:
    
    // Adjustment used in certain places where we don't know it yet.
    // (Generally this is something that is going to be cached, but we
    // don't know the exact value in the cached range to assign yet.)
    static final int UNKNOWN_ADJ = 16;
    
    // This is a process only hosting activities that are not visible,
    // so it can be killed without any disruption.
    static final int CACHED_APP_MAX_ADJ = 15;
    static final int CACHED_APP_MIN_ADJ = 9;
    
    // The B list of SERVICE_ADJ -- these are the old and decrepit
    // services that aren't as shiny and interesting as the ones in the A list.
    static final int SERVICE_B_ADJ = 8;
    
    // This is the process of the previous application that the user was in.
    // This process is kept above other things, because it is very common to
    // switch back to the previous app.  This is important both for recent
    // task switch (toggling between the two top recent apps) as well as normal
    // UI flow such as clicking on a URI in the e-mail app to view in the browser,
    // and then pressing back to return to e-mail.
    static final int PREVIOUS_APP_ADJ = 7;
    
    // This is a process holding the home application -- we want to try
    // avoiding killing it, even if it would normally be in the background,
    // because the user interacts with it so much.
    static final int HOME_APP_ADJ = 6;
    
    // This is a process holding an application service -- killing it will not
    // have much of an impact as far as the user is concerned.
    static final int SERVICE_ADJ = 5;
    
    // This is a process with a heavy-weight application.  It is in the
    // background, but we want to try to avoid killing it.  Value set in
    // system/rootdir/init.rc on startup.
    static final int HEAVY_WEIGHT_APP_ADJ = 4;
    
    // This is a process currently hosting a backup operation.  Killing it
    // is not entirely fatal but is generally a bad idea.
    static final int BACKUP_APP_ADJ = 3;
    
    // This is a process only hosting components that are perceptible to the
    // user, and we really want to avoid killing them, but they are not
    // immediately visible. An example is background music playback.
    static final int PERCEPTIBLE_APP_ADJ = 2;
    
    // This is a process only hosting activities that are visible to the
    // user, so we'd prefer they don't disappear.
    static final int VISIBLE_APP_ADJ = 1;
    
    // This is the process running the current foreground app.  We'd really
    // rather not kill it!
    static final int FOREGROUND_APP_ADJ = 0;
    
    // This is a process that the system or a persistent process has bound to,
    // and indicated it is important.
    static final int PERSISTENT_SERVICE_ADJ = -11;
    
    // This is a system persistent process, such as telephony.  Definitely
    // don't want to kill it, but doing so is not completely fatal.
    static final int PERSISTENT_PROC_ADJ = -12;
    
    // The system process runs at the default adjustment.
    static final int SYSTEM_ADJ = -16;
    
    // Special code for native processes that are not being managed by the system (so
    // don't have an oom adj assigned by the system).
    static final int NATIVE_ADJ = -17;
    }
    

    相较于Importance等级而言adj值可以赋予我们更多的参考价值,从上述adj值的定义中我们可以看到,值越小优先级越高,比如native进程的adj值为-17,对于这个adj值的进程来说,系统根本不会动它一分一毫,实质上当进程的adj值去到2时系统就很少会因为其它原因而去杀死它,这些在研究进程保活中都非常重要。


    如有错误欢迎指出来,一起学习。
    在这里插入图片描述

    展开全文
  • 我最近在看一些Android进程方面的知识,发现自己在这方面有些欠缺。所以在查阅完资料后特意在此做一下笔记,巩固这方面的知识。 Android中有多种进程,我列出下面几种:前台进程,可见进程,服务进程,后台进程,空...

    我最近在看一些Android进程方面的知识,发现自己在这方面有些欠缺。所以在查阅完资料后特意在此做一下笔记,巩固这方面的知识。 
    Android中有多种进程,我列出下面几种:前台进程,可见进程,服务进程,后台进程,空进程。它们的定义特点分别如下:

    前台进程

    这个进程是最重要的,是最后被销毁的。前台进程是目前正在屏幕上显示的进程和一些系统进程,也就是和用户正在交互的进程。例如,我正在使用qq跟别人聊天,在我的Android手机上这个进程就应该是前台进程。

    可见进程

    可见进程指部分程序界面能够被用户看见,却不在前台与用户交互的进程。例如,我们在一个界面上弹出一个对话框(该对话框是一个新的Activity),那么在对话框后面的原界面是可见的,但是并没有与用户进行交互,那么原界面就是可见进程。

    服务进程

    服务进程是通过 startService() 方法启动的进程,但不属于前台进程和可见进程。例如,在后台播放音乐或者在后台下载就是服务进程。

    后台进程

    后台进程指的是目前对用户不可见的进程。例如我正在使用qq和别人聊天,这个时候qq是前台进程,但是当我点击Home键让qq界面消失的时候,这个时候它就转换成了后台进程。当内存不够的时候,可能会将后台进程回收。

    空进程

    空进程指的是在这些进程内部,没有任何东西在运行。保留这种进程的的唯一目的是用作缓存,以缩短该应用下次在其中运行组件所需的启动时间。

    它们的回收顺序从先到后分别是:空进程,后台进程,服务进程,可见进程,前台进程。

    这里我是对进程的概念做了一些记录,下面用作参考的文章则非常详细,尤其是第三篇文章是Google官方的文章,对我有很大的帮助。

    参考: 
    1.http://www.nowcoder.com/test/question/done?tid=4305838&qid=19988#summary 
    2.http://blog.csdn.net/hyggt/article/details/7255043 
    3.https://developer.android.com/guide/components/processes-and-threads.html#Processes

    展开全文
  • Android的5个进程等级

    万次阅读 2012-03-15 21:53:13
    1、foreground process  正处于activity resume状态  正处于bound服务交互的状态  正处于服务在前台运行的状态(StartForeGround()被调用)  Service生命周期正在被执行(onCreate(),onStart(),...
    1、foreground process
        正处于activity resume状态
        正处于bound服务交互的状态
        正处于服务在前台运行的状态(StartForeGround()被调用)
        Service生命周期正在被执行(onCreate(),onStart(),onDestroy())
        BroadcastReceiver正在执行onReceive()方法
        杀死foreground需要用户响应,因为这个安全优先级是最高的
        是用户操作所必须的,任一时间下,仅有少数进程会处于前台,仅当内存实在无法供给它们维持同时运行时才会被杀死。一般来说,在这种情况下,设备依然处于使用虚拟内存的状态,必须要杀死一些前台进程以用户界面保持响应。
    •Android会依据进程中当前活跃组件的重要程度来尽可能高的估量一个进程的级别。比如说,如果一个进程中同时有一个服务和一个可视的activity,则进程会被判定为可视进程,而不是服务进程。
    2、visible process
        activity不在前端显示,但也没有完全隐藏,能够看得见,比如弹出一个对话框
        一个bound到visible或者foreground的activity的service
        没有前台组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可视的:
    • 它包含着一个不在前台,但仍然为用户可见的activity(它的onPause()方法被调用)。这种情况可能出现在以下情况:比如说,前台activity是一个对话框,而之前的    activity位于其下并可以看到。
    • 它包含了一个绑定至一个可视的activity的服务。
    可视进程依然被视为是很重要的,非到不杀死它们便无法维持前台进程运行时,才会被杀死。
    3、Service process
        正在运行的,不在上述两种状态的service
    是由 startService() 方法启动的服务,它不会变成上述两类。尽管服务进程不会直接为用户所见,但它们一般都在做着用户所关心的事情(比如在后台播放mp3或者从网上下载东 西)。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可视进程的运行需要。
    4、background process
        不可见状态的activity进程,onstop被调用
        包含目前不为用户所见的activity(Activity对象的 onStop() 方法已被调用)。这些进程与用户体验没有直接的联系,可以在任意时间被杀死以回收内存供前台进程、可视进程以及服务进程使用。一般来说,会有很多背景进程 运行,所以它们一般存放于一个LRU(最后使用)列表中以确保最后被用户使用的activity最后被杀死。如果一个activity正确的实现了生命周 期方法,并捕获了正确的状态,则杀死它的进程对用户体验不会有任何不良影响。
    5、empty process
        没有运行任何component的进程,保留这个进程主要是为了缓存的需要
        不包含任何活动应用程序组件。这种进程存在的唯一原因是做为缓存以改善组件再次于其中运行时的启动时间。系统经常会杀死这种进程以保持进程缓存和系统内核缓存之间的平衡。
    此外,一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供 服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A 进程最低也会被视为与进程B拥有同样的重要性。

    展开全文
  • android 获取手机运行的进程

    千次阅读 2017-09-19 08:45:50
    今天,简单讲讲如何获取系统运行的进程。 ActivityManager.RunningAppProcessInfo类与获取正在运行的应用程序 每一个应用程序都会运行在它独立的进程里,但是为了节省资源或者这些应用程序是为了完成某一共同...



    今天,简单讲讲如何获取系统运行的进程。


    ActivityManager.RunningAppProcessInfo类与获取正在运行的应用程序
    每一个应用程序都会运行在它独立的进程里,但是为了节省资源或者这些应用程序是为了完成某一共同工作,它们
    也可能会运行在一个进程里。


    2016228174335726.gif (295×68)


    知识点介绍:
    ActivityManager.RunningAppProcessInfo类
    说明: 封装了正在运行的进程信息
    常用字段:
    int   pid    进程ID
    int   uid    进程所在的用户ID
    String   processName 进程名,默认是包名或者由android:process=””属性指定
    String [ ]   pkgList      运行在该进程下的所有应用程序包名


    另外。讲讲ActivityManager的使用:

       知识准备:Android 应用程序模块: 应用、任务、进程的知识介绍:

                1  一个android 包(简称.apk) :里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们

                  设备上的文件。

                2  一个 任务 :通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个

                  上层的应用,可以将你的任务切换到前台来。

                3  一个 进程 :是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于

                  一个.apk包;然而,进程 标签常用来改变代码运行的位置,可以是全部的.apk包 或者是独立的活动,接收器,服务, 或者

                     提供器组件。

      进程

             在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:

                1、提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。

                2、可将多个.apk包运行在同一个进程里减少系统开销。

                3、帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。

             于是,为了完成某一任务或者减少系统资源的开销,一个进程里可以运行一个或多个应用程序

         

        更多知识点获取,请访问:《Android 应用程序模块: 应用, 任务, 进程, 和线程

     

     

    ActivityManager 类:

                 获取方法 ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

              常用的静态内部类如下(下面具体介绍):

                         ActivityManager.MemoryInfo: 系统可用内存信息

                          ActivityManager.RecentTaskInfo: 最近的任务信息

                          ActivityManager.RunningAppProcessInfo: 正在运行的进程信息

                          ActivityManager.RunningServiceInfo: 正在运行的服务信息

                          ActivityManager.RunningTaskInfo: 正在运行的任务信息

     常用方法:

    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo)

                    说明:获取系统可用内存信息,数据封装在outInfo对象上

    public Debug.MemoryInfo getProcessMemoryInfo(int[ ] pids

         说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。

         参数: pids 进程ID的集合            

    PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)

     

     public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()

        说明: 获取系统里正在运行的进程

    public List<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)

         说明: 获取系统里所有正在运行的服务         

         参数:可能服务的最大值(赋予一常数即可,20、50都OK)

    public List<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)

                   说明:获取系统里正在运行的服务

                   参数: 同上

    public List<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)

                 说明:获取系统里最近启动的任务

                 参数: 同上,flags一般为0即可

    public voidkillBackgroundProcess(String packageName)

                说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统

                PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,

                       能够杀死的一定是用户进程。

              public void restartPackage(String packageName)

                说明:该方法已弃用,等同于killBackgroundProcess 。

     

     

     ActivityManager.MemoryInfo类

        常用字段:

                long availMem 系统可用内存

                long threshold系统内存不足的阀值,即临界值

                boolean lowMemory 如果当前可用内存<=threshold,该值为真


    具体代码:

    /**

     * 判断进程是否运行 *

     @return */

    public static boolean isProessRunning(Context context, String proessName) {
    
            boolean isRunning = false;
            ActivityManager am = (ActivityManager) context
                    .getSystemService(Context.ACTIVITY_SERVICE);
    
            List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo info : lists) {
                if (info.processName.equals(proessName)) {
                    isRunning = true;
                }
            }
    
            return isRunning;
        }


    **

     * 判断service是否运行
     * @return
     */
    public static boolean isServiceExisted(Context context, String className) {
            ActivityManager activityManager = (ActivityManager) context
                    .getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningServiceInfo> serviceList = activityManager
                    .getRunningServices(Integer.MAX_VALUE);
    
            if (!(serviceList.size() > 0)) {
                return false;
            }
    
            for (int i = 0; i < serviceList.size(); i++) {
                ActivityManager.RunningServiceInfo serviceInfo = serviceList.get(i);
                ComponentName serviceName = serviceInfo.service;
    
                if (serviceName.getClassName().equals(className)) {
                    return true;
                }
            }
            return false;
        }


    判断service运行的代码似乎有问题,我在程序里无法判断自己的service是否在运行。有兴趣的自己查找资料。


    android 获取手机运行的进程就讲完了。


    就这么简单。

    
    展开全文
  • Android--进程常驻

    千次阅读 2018-05-31 16:53:33
    网上大致有以下几种方法:1、将Service设置为前台进程2、在service的onStartCommand方法里返回 STATR_STICK3、添加Manifest文件属性值为android:persistent=“true”4、覆写Service的onDestroy方法5、添加广播监听...
  • Android进程

    2019-05-29 11:24:19
    本文知识点包括:如何使用adb查看进程信息&进程划分&内存阈(yu四声)值 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,线程是CPU执行的最小单元,进程包含线程. 如何查看进程解基本信息 ...
  • RPC(Remote Procedure Call)即远程过程调用,它是一种通过网络从远程计算机程序上请求服务,在不需要了解底层网络技术的协议下,即可获取计算机进程中的数据。RPC使得开发包括网络分布式多程序在内的应用程序更加...
  • 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包括三星...
  • Android内核学习笔记

    万次阅读 2015-12-20 15:47:39
    一、init 二、binder 《ANDROID框架揭秘》第六章 - 第十章 以生动的形式讲述了binder,但是不够详细。值得参考。 《Android系统源代码情景分析》第五章 描叙详细,但是不够生动。值得参考。
  • 如何在Android中取得当前进程

    万次阅读 2012-08-27 21:33:18
    Android中,我们可以通过Process.myPid()和 RunningAppProcessInfo来取得当前的进程名。 示例1 String getCurProcessName(Context context) { int pid = android.os.Process.myPid(); ActivityManager ...
  • Android源码解析系列

    万次阅读 多人点赞 2016-07-24 10:55:20
    知乎上看了一篇非常不错的博文:有没有必要阅读ANDROID源码 看完之后痛定思过,平时所学往往是知其然然不知其所以然,所以为了更好的深入android体系,决定学习android framework层源码。这篇文章就是源码学习的汇总...
  • Android内核开发》系列的第八篇文章,本文主要关注如何分析Android系统的启动log,学会通过搜索重要的TAG标签,找到Android启动过程中的重要节点。要学会分析系统的启动log信息,首先得了解Android系统的启动过程...
  • 前言 为了方便大家的阅读以及自己的知识体系的建立,特意来写出这个引导文章。以前我是遇到什么写什么,想到什么写什么,从2016年开始我将围绕这个知识体系来写文章,从点到面来逐步建立...Android网络编程(完结)
  • Android 系统整体架构

    千次阅读 2018-04-11 16:25:49
    看了Gityuan大神的博客,最近因为遇到一些工作上的问题踩了坑,决定正式开始阅读Android framework层源码,当然后面可能还会经历一个多月的毕设流程,等毕业回来工作也正式要迈上正轨了,好几个月没写博客了,前段...
  • Android系统架构开篇

    千次阅读 2019-03-25 14:56:39
    一、Android概述Android系统非常庞大,底层是采用Linux作为基底,上层采用带有虚拟机的Java层,通过通过JNI技术,将上下打通,融为一体。下图是Google提供的一张经典的4层架构图,从下往上,依次分为Linux内核,系统...
  • 需求是,有个后台的service,需要一直跑着,但是系统或者360一键清理后,整个应用进程就没了,service也就没了。如何重启?我看了一些资料,说的是写一个守护进程,是两个进程,不是线程噢。网上搜了一些资料: 1,...
  • Android Studio调试设置的断点无效

    万次阅读 2016-07-21 21:18:52
    真他娘的坑爹,今天调试一个程序,在一个Activity里面设置了断点,无论如何代码都不能在断点处停下来,查了一整天才发现...另外一种办法就是附加remote所在的进程进行调试:attach debugger to android process andro
  • Android 进程常驻(0)----MarsDaemon使用说明

    万次阅读 多人点赞 2016-03-17 22:19:38
    Android常驻进程进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验...
  • Android启动优化,去除白屏或者黑屏

    千次阅读 2016-05-30 16:12:14
    Android启动优化,去除白屏或者黑屏App启动的方式:冷启动:指后台没有改应用的进程,重新创建进程,过程为,实例化Application,然后实例化入口Activity,最后显示Activity.热启动:后台中存在当前的进程,直接从进程中启动,...
  • 问题不知道怎么 app 对应的进程Android Monitor / DDMS 中都看不到了,想调试或者看个日志都不行。分析一般我们在输出日志时都会根据是否为 debug 统一控制,这样可以避免在 生产包 中大量输出日志,不安全不说,...
1 2 3 4 5 ... 20
收藏数 574,401
精华内容 229,760
关键字:

android的进程