关于android中应用程序正在运行的进程有下面几种:1-包含services的进程,2-不包含services的进程,3-杀死应用时有些进程被init回收(类似于僵尸进程),ppid变为1,无法通过android 应用层代码获得的进程。这些进程可能是应用的重启进程,导致应用重启,也就是我们做了杀死应用进程的操作后,发现一段时间后,应用又重新启动的现象。

一、对于前两者,可以调用androud系统函数来获得,示例如下:

ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE) ;

//获得系统运行的进程

List appList1 = mActivityManager

.getRunningAppProcesses();

for(RunningAppProcessInfo running : appList1) {

System.out.println(running.processName);

}

System.out.println("================");

//获得当前正在运行的service

List appList2 = mActivityManager

.getRunningServices(100);

for(ActivityManager.RunningServiceInfo running : appList2) {

System.out.println(running.service.getClassName());

}

System.out.println("================");

//获得当前正在运行的activity

List appList3 = mActivityManager

.getRunningTasks(1000);

for(ActivityManager.RunningTaskInfo running : appList3) {

System.out.println(running.baseActivity.getClassName());

}

System.out.println("================");

//获得最近运行的应用

List appList4 = mActivityManager

.getRecentTasks(100,1);

for(ActivityManager.RecentTaskInfo running : appList4) {

System.out.println(running.origActivity.getClassName());

}

二、对于第三种,我们都知道在linux shell中输入ps命令,可以查看所有运行的进程,

root@android:/ #

root@android:/ # ps

USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME

root      1     0     412    244   c00cf1c0 0000ffe4 S /init

root      2     0     0      0     c0044560 00000000 S kthreadd

root      3     2     0      0     c002eae4 00000000 S ksoftirqd/0

root      6     2     0      0     c007aaa4 00000000 S migration/0

root      7     2     0      0     c007dfb0 00000000 S watchdog/0

root      12    2     0      0     c003fd14 00000000 S khelper

root      13    2     0      0     c003fd14 00000000 S netns

.......

root      17    2     0      0     c003fd14 00000000 S suspend_sys_syn

u0_a55    16896 1413  545192 52208 ffffffff 4010eea4 S com.tencent.mm

u0_a55    16934 1413  526176 34352 ffffffff 4010eea4 S com.tencent.mm:push

u0_a37    17719 1413  512816 30040 ffffffff 4010eea4 S com.nufront.NufrontTestDemo

u0_a25    17835 1413  487536 22400 ffffffff 4010eea4 S com.android.smspush

root      18674 1432  928    544   c0011ad4 40160934 S /system/bin/sh

root      18688 18674 1236   460   00000000 400bfd38 R ps

再执行kill命令,就可以杀死对应的进程

root@android:/ # kill  16896

再有,如果执行ps | grep试试看:

root@android:/ #

root@android:/ #ps | grep tencent

u0_a55    16896 1413  545192 52208 ffffffff 4010eea4 S com.tencent.mm

u0_a55    16934 1413  526176 34352 ffffffff 4010eea4 S com.tencent.mm:push

root@android:/ #

在android中有一个函数是有kill命令功能的: Process.killProcess(int pid);

所以,我们只需要根据package name,找到没有被杀死的进程的进程号,再调用killprocess()函数,就可以杀死一直杀不死的进程了。可参考下面的代码:

java.lang.Process process=null;

Runtime rt=Runtime.getRuntime();

System.out.println("start");

try {

process=rt.exec("busybox pgrep nuomi");

InputStream is=null;

InputStreamReader isr=null;

BufferedReader buffer=null;

String line=null;

String xxx = null;

is=process.getInputStream();

isr=new InputStreamReader(is);

buffer=new BufferedReader(isr);

while((line=buffer.readLine())!=null){

System.out.println(line+"----------");

Process.killProcess(Integer.valueOf(line));

xxx = line;

}

System.out.println(xxx+"***********");

} catch (IOException e) {

e.printStackTrace();

}

System.out.println("end");

三、另外一些关于应用程序的函数可参考下面

推荐方法

1、

//全部程序包

private void queryFilterAppInfo() {

PackageManager pm = this.getPackageManager();

// 查询所有已经安装的应用程序

List

listAppcations = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的

for (ApplicationInfo app : listAppcations) {

AppInfo appInfo = new AppInfo();

appInfo.setAppLabel((String) app.loadLabel(pm));

appInfo.setAppIcon(app.loadIcon(pm));

appInfo.setPkgName(app.packageName);

mlistAppInfo.add(appInfo);

}

}

2、

// 获得所有系统的

public void querySysAppInfo()

{

PackageManager pm = this.getPackageManager();

Intent intent = new Intent(Intent.ACTION_MAIN, null);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

// 通过查询,获得所有ResolveInfo对象.

List resolveInfos =

pm.queryIntentActivities(intent,

PackageManager.MATCH_DEFAULT_ONLY);

for (ResolveInfo reInfo : resolveInfos) {

String activityName = reInfo.activityInfo.name; //

获得该应用程序的启动Activity的name

String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名

String appLabel = (String) reInfo.loadLabel(pm); //

获得应用程序的Label

Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标

System.out.println(appLabel + " activityName---" +

activityName

+ " pkgName---" + pkgName);

}

}

3、  //最简单的方法

public  boolean appIsInstalled(String

packageName){

try {

PackageManager pm = this.getPackageManager();

pm.getPackageInfo(packageName,

PackageManager.GET_ACTIVITIES);

System.out.println("已安装"+packageName);

} catch (NameNotFoundException e) {

System.out.println("没有安装"+packageName);

return false;

}

return true;

}

4、// 获得所有包信息

public void getInstallPackage() {

PackageManager packageManager =

this.getPackageManager();

List

packageInfoList=packageManager.getInstalledPackages(0);

mlistAppInfo.clear();

for (int

i=0;i

{

PackageInfo pi = packageInfoList.get(i);

System.out.println((i+1)+":"+pi.toString());

}

}

5、  //直接启动方法

public  void srartApp(String

packageName){

Intent intent =

this.getPackageManager().getLaunchIntentForPackage(packageName);

if(intent!=null)

//已安装包 直接启动

startActivity(intent);

}

参考:androidbin.iteye.com/blog/1594908,blog.sina.com.cn/s/blog_3e333c4a01015v3e.html等,谢谢!!!

android提示程序正在执行,Android中获取正在运行的进程(一)相关推荐

  1. android获取运行应用程序,Android中获取正在运行的应用程序

    Android中获取正在运行的应用程序 ActivityMain.java 1.public class ActivityMain extends ListActivity { 2. @Overrid ...

  2. android xml获取指定,android:如何从xml文件中获取信息?

    我得到一个程序,从一个链接的服务器获取天气.我已经做了一些将字符串结合到URL的字符串.我现在需要从XML文件中获取信息.android:如何从xml文件中获取信息? 这是我的代码:(我更换了,为了安 ...

  3. android 获取手机运行的进程

    今天,简单讲讲如何获取系统运行的进程. ActivityManager.RunningAppProcessInfo类与获取正在运行的应用程序 每一个应用程序都会运行在它独立的进程里,但是为了节省资源或 ...

  4. ios 运行android应用程序,iOS与Android应用程序沙盒机制的研究与总结

    简介 复杂系统始终存在漏洞, 软件复杂性只会随着时间的推移而增加.无论您如何谨慎地采用安全编码实践并防范错误, 攻击者只需通过一次防御即可成功.虽然应用沙盒不能防止对你的应用的攻击, 但它确实最大限度 ...

  5. Android获取正在运行的进程列表

    Android 获取正在运行的进程,下列方法暂时只能获取Android 7 及以下版本 三方库: implementation 'com.jaredrummler:android-processes: ...

  6. 【Linux 内核】实时调度类 ⑥ ( 实时调度类核心函数源码分析 | 插入进程到执行队列 | 从执行队列中选择优先级最高的进程 )

    文章目录 一.enqueue_task_rt 函数 ( 插入进程到执行队列 ) 二.pick_next_task_rt 函数 ( 从执行队列中选择优先级最高的进程 ) 本篇博客中 , 开始分析 str ...

  7. JAVA中获取当前运行的类名,方法名,行数

    JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...

  8. Python 第三方模块之 psutil - 获取系统运行的进程和系统利用率信息

    一.psutil模块: 官方网址:http://pythonhosted.org/psutil/ 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻 ...

  9. Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用

    关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...

最新文章

  1. 数据结构和算法:(3)3.2.2单链表的整表删除
  2. 【机器学习入门】(4) 决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择
  3. shell脚本自动执行,top命令无输出
  4. 如何利用.pdb文件去调试
  5. Linux线上环境部署zabbix,CentOS 7.3下Zabbix 4.0监控环境安装部署
  6. HTTP 返回状态消息讲解
  7. SAP Spartacus user-addresses.effect.ts里发送地址加载成功的action,会触发我们自己的reducer
  8. 使用XFire+Spring构建Web Service(一)——helloWorld篇
  9. docker 挂载目录_Docker容器数据管理
  10. Nginx开启Gzip压缩配置详解
  11. aws rds恢复数据库_使用AWS Glue将数据从AWS S3加载到AWS RDS SQL Server数据库
  12. 《嵌入式》复习资料公共版
  13. Oracle的DBV工具
  14. Java飞机大战项目
  15. arcgis api 3.X 实现加载百度矢量地图和百度影像地图
  16. MCSA / Windows Server 2016 安装Desktop Experience
  17. 我认为还算经典的语录
  18. 迅雷面试题: 模拟银行一天的工作, 统计vip客户和普通客户的办理业务的平均等待时间.
  19. AUTOSAR MCAL CAN Driver 接口函数
  20. 武大教授计算机学院,武汉大学计算机学院董文永教授受邀到我院进行学术交流...

热门文章

  1. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...
  2. Redis链表结构深入
  3. 获取焦点改变输入框背景色
  4. android存到手机内存,android保存文件到手机内存
  5. java saxexception_SAXException
  6. 两用物项许可证办理流程_一指通 | 出口许可证办理流程
  7. 各路由协议的协议号_厂房转让协议
  8. vs中工具箱代表的意思_“日”除了代表太阳,其实还有这种意思,特别是出现在这些词语中的“日”...
  9. ubuntu 缺少php安装包,ubuntu 16.04 lts安装php环境和composer依赖包管理
  10. 表变量是什么_DAX学习:使用VAR定义变量