文档章节

获取APP后台运行状态,杀死指定APP

dailei1021
 dailei1021
发布于 2016/03/03 17:04
字数 475
阅读 201
收藏 5
点赞 1
评论 0

当我们需要控制某个APP的时候,就需要知道这个APP当前的状态;

首先要开允许检测,关闭进程的权限,在manifests中配置:

<!--杀死第三方应用的权限-->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

<!--获取TASKS权限-->
<uses-permission android:name="android.permission.GET_TASKS" />

有两种方式:

1、遍历栈里面的应用,对比是否有相同的APP应用

/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppRunning(Context context, String packageName)
{
    boolean isAppRunning = false;
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> list = activityManager.getRunningTasks(100);

    for (ActivityManager.RunningTaskInfo info : list)
    {
        if (info.topActivity.getPackageName().equals(packageName) ||
                info.baseActivity.getPackageName().equals(packageName))
        {
            isAppRunning = true;
            SkyLogger.d(TAG,
                    info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" +
                            info.baseActivity.getPackageName());
            break;
        }
    }
    return isAppRunning;
}

2、检测是否正在运行

/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppOnForeground(Context context, String packageName)
{
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();

    if (appProcessInfos == null)
        {
        SkyLogger.d(TAG, "appProcessInfos == null");
        return false;
    }

    for (RunningAppProcessInfo appProcess : appProcessInfos)
    {
        if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
                appProcess.processName.equals(packageName))
        {
            SkyLogger.d(TAG, "正在后台运行");
            return true;
        }
    }

    ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity;
    String currentPackageName = cn.getPackageName();

    if (!TextUtils.isEmpty(currentPackageName) && packageName.equals(currentPackageName))
    {
        SkyLogger.d(TAG, "正在前台运行");
        return true;
    }
    SkyLogger.d(TAG, "没有运行");
    return false;
}

杀死某个应用

/**
 * 强制关闭应用
 *
 * @param context     应用上下文
 * @param packageName 关闭的APP的包名
 */
public static void closeDeviceApp(Context context, String packageName)
{
    if (packageName != null && context != null)
    {
        ActivityManager activityManager =
                (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        activityManager.killBackgroundProcesses(packageName);
        SkyLogger.d(TAG, packageName + " is killed.");
    }
    else
    {
        SkyLogger.d(TAG, "packageName is null.");
    }
}

如果仅仅只是检测该APP是否运行,可参照如下方法:

/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppOnForeground(Context context, String packageName)
{
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();

    //一般不会跑到这里来,如果跑到这里来的话,要么就是这个app废了,要不就是见鬼了。。
    if (appProcessInfos == null)
    {
        SkyLogger.d(TAG, "appProcessInfos == null");
        return false;
    }
    else
    {
        for (RunningAppProcessInfo appProcess : appProcessInfos)
        {
            if (appProcess.processName.equals(packageName))
            {
                SkyLogger.d(TAG, packageName+"正在后台运行...");
                return true;
            }
        }
        return false;
    }
}


© 著作权归作者所有

共有 人打赏支持
dailei1021
粉丝 3
博文 63
码字总数 23660
作品 0
深圳
程序员
应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

原作者:“裂缝中的阳光dg”,本文现已重新修订并整理发布,感谢原作者的无私分享。 1、前言 在Android 4.4及以后的系统中,应用能否常驻内存,一直以来都是相当头疼的事情,尤其移动端IM、消...

JackJiang2011
2017/10/20
0
0
Android Activity生命周期介绍及启动时间抓取

一、Activity启动流程简介: 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。 2.当前Activity被其他Activity覆盖或被锁屏:系统...

孟飞阳
2016/06/16
228
0
android之Files,Saving State,Preferences(一)

保存简单的APP数据 1.Shared Preferences 是一个简单,轻量级的,以键值对的机制(name/value pair---NVP)存储一些基础数据(Boolean,string,float等),最常用在保存用户的APP参数。 2.保存...

Chanimalx
2013/01/27
0
0
如何让你的app在后台被干掉后优雅的启动。

作为一名Android开发师,肯定在处理用户的体验上下一定的功夫。有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具后长时间停留,并且可能做了一些你不...

她的梦z
04/11
0
0
Android系统性能演变历程

Android系统是一个开源的、可自由定制的移动系统,但是绝对自由也意味着更加混乱。Android第三方定制造成Google无法对其进行控制,加上第三方应用无节制的耗费系统资源,直接后果就是Android...

徐玉强
2016/04/17
44
0
iOS端近场围栏检测(一) ——iBeacon

前言 自iOS7开始,苹果加入了beacon的围栏检测API。以苹果固有的尿性--喜欢在所有的设备之前添加字母“i”,所以命名为“iBeacon”。其对应的Region类型为:CLBeaconRegion,之前有做过地理围...

尛破孩波波
06/04
0
0
android保活进程总结--双进程保活策略

进程的保活,在很多资讯类的App和即时通讯App的用处很大,奈何谷歌的推送服务在国内是被阉割了!据说是在8.0(奥利奥)相关政府机构已经将开放这项功能提上了日程,嗯,没错8.0,预计再过三五...

傲娇的小bug
01/03
0
0
iOS应用程序生命周期(前后台切换,应用的各种状态)详解

iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在...

mahb520
2014/10/13
0
0
iOS应用程序生命周期(前后台切换,应用的各种状态)详解

iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在...

泊竹
2014/05/08
0
0
iOS 后台下载及管理库

说起下载第一个想起的就是ASI。一年前接手的新项目是核心功能是视频相关业务,在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大。后来新需求需要视频后台下载,使用NSURLSe...

LeavesLife
2017/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
39分钟前
9
3
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
11
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部