Android之ActivityManage长用方法总结

Android 如何判断一个应用在运行 
在一个应用中,或一个Service 、Receiver中判断一个应用是否正在运行,以便进行一些相关的处理。
这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就是管理Activity的,它有一个方法叫getRunningTasks,可以得到当前系统正在运行的Task的列表,代码如下:

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> list = am.getRunningTasks(100);
for (RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(MY_PKG_NAME) &&info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
isAppRunning = true;
//find it, break
break;
}
}

100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此进程在运行,具体要做如何判断就看自已的业务需求。这个类还有更多的方法可以取得系统运行的服务、内存使用情况等的方法,请各位自行查找。

需要加上权限:
<uses-permission android:name="android.permission.GET_TASKS" />


=====================================
//判断应用是否在运行 
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> list = am.getRunningTasks(100);
String MY_PKG_NAME = "com.cyberblue.iitag";
for (RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(MY_PKG_NAME) ||                         info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
Log.i("程序是否运行?", "是");
break;
}
}

================================================
Android系统内部状态信息的相关api:

得到ActivityManager :
ActivityManager activityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE)

这个位查到底是什么信息:   
ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();  

获取进程内存状态的信息:
Debug.MemoryInfo[] processMemoryInfo = activityManager.getProcessMemoryInfo(processIds);
获取当前运行的service信息:
List<RunningServiceInfo> runningServiceInfos = activityManager.getRunningServices(MaxValue);   

获取当前运行的任务信息:
List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(MaxValue);
其中runningTaskInfos 的 topActivity就是当前Task的活跃Activity
在getRunningTasks()所返回的Task队列中系统会根据这些Task的活跃度有一个排序,越活跃越是靠前。第一个就是当前活动的Task。。。

/**
* 检测某ActivityUpdate是否在当前Task的栈顶
*/
public boolean isTopActivy(String cmdName){
ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
String cmpNameTemp = null;

if(null != runningTaskInfos){
cmpNameTemp=(runningTaskInfos.get(0).topActivity).toString);
Log.e("cmpname","cmpname:"+cmpName);
}

if(null == cmpNameTemp)return false;
return cmpNameTemp.equals(cmdName);
}

最后在应用中添加所需的权限:
<uses-permission android:name="android.permission.GET_TASKS"/>

================================================================
private  boolean isLauncherRunnig(Context context) {  
boolean result = false ;  
List<String> names = getAllTheLauncher();  
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE) ;  
List<ActivityManager.RunningAppProcessInfo> appList = mActivityManager.getRunningAppProcesses() ;  
for (RunningAppProcessInfo running : appList) {  
if (running.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {  
for (int i = 0; i < names.size(); i++) {  
if (names.get(i).equals(running.processName)) {  
result = true ;  
break;  
}  
}  
}  
}  
return result ;  
}  


private List<String> getAllTheLauncher(){  
List<String> names = null;  
PackageManager pkgMgt = this.getPackageManager();  
Intent it = new Intent(Intent.ACTION_MAIN);     
it.addCategory(Intent.CATEGORY_HOME);   
List<ResolveInfo> ra =pkgMgt.queryIntentActivities(it,0);   
if(ra.size() != 0){  
names = new ArrayList<String>();  
}  
for(int i=0;i< ra.size();i++)      
{  
String packageName =  ra.get(i).activityInfo.packageName;  
names.add(packageName);  
}    
return names;  
}  
android 取当前显示的activity是什么
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
Log.d("", "pkg:"+cn.getPackageName());
Log.d("", "cls:"+cn.getClassName());


android 如何判断程序是否在前台运行
[java] view plaincopy 
private boolean isTopActivity(){  
List<RunningTaskInfo>  tasksInfo = activityManager.getRunningTasks(1);  
if(tasksInfo.size() > 0){  
//应用程序位于堆栈的顶层  
if(packageName.equals(tasksInfo.get(0).topActivity.getPackageName())){  
return true;  
}  
}  
return false;  
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络就业范围分析,计算机网络技术专业就业前景怎么样「就业形势分析」...

计算机网络技术专业作为目前的热门专业之一&#xff0c;在就业方向上可以有哪些选择?计算机网络技术专业就业前景如何?下文小编给大家整理了计算机网络技术专业的最新就业形势分析&#xff0c;供参考!1.掌握计算机网络技术专业的基本理论、基本知识;2.掌握计算机网络技术专业…

Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题

A. Alyona and Numbers题目连接&#xff1a; http://www.codeforces.com/contest/682/problem/A Description After finishing eating her bun, Alyona came up with two integers n and m. She decided to write down two columns of integers — the first column containing…

pomForSSH

2019独角兽企业重金招聘Python工程师标准>>> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache…

WPF 实现展示反应盘、者试剂仓控件

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&#xff08;需备注WPF开发者&#xff09;PS&#xff1a;有更好的…

向linux内核版本号添加字符/为何有时会自动添加“+”号

转载&#xff1a;http://blog.csdn.net/adaptiver/article/details/7225980 1. 引子 编译2.6.35.7 kernel版本的时候发现&#xff0c;“2.6.35.7“的内核版本编译成功后生成的版本号变成了“2.6.35.7”&#xff0c;为什么后面会多一个加号呢&#xff1f;问题出现在linux的版本…

渣男劈腿,两个女生逼他做出选择,结果......

1 生一个女儿有多重要&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 真实版眼睛瞪得像铜铃&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 地表最强撞衫&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 过年时最怕遇见的人&#xff08;素材…

安卓判断服务器返回的状态码,AppsFlyer返回状态码400

我实现Appsflyer我的样本项目&#xff0c;但是当我运行它&#xff0c;服务器返回错误代码400AppsFlyer返回状态码400I/AppsFlyer_1.18-117182240: response code: 400还有就是我MainActivty.javapublic class MainActivity extends AppCompatActivity {public static final Str…

java多进程、多线程讲解

一、 什么是进程、线程&#xff1f;线程和进程的区别&#xff1f; 1. 进程 当一个程序进入内存运行时&#xff0c;即变成一个进程。进程是处于运行过程中的程序。 进程是操作系统进行资源分配和调度的一个独立单位。 进程的三个特征&#xff1a; 独立性 独立存在的实体&#xf…

fstream实现文件复制(并将文件名小写改成大写)

使用C的fstream类来实现char* filename "C:\\grldr.mbr";//须复制文件路径 int len strlen(filename); while( *(filenamelen-1)!\\){ len--; }//获得文件名 char temp[32]; strcpy(temp,(filenamelen)); for (int i 0; i<s…

AsyncHttpClient的连接池使用逻辑

AsyncHttpClient的连接池结构很简单, NettyConnectionsPool内部重要的几个变量如下 // 连接池, 通过 host 区分不同的池private final ConcurrentHashMap<String, ConcurrentLinkedQueue<IdleChannel>> connectionsPool new ConcurrentHashMap<String, Concurr…

记录一次C#爬虫记录,获取必应图片

起因事情是这样的&#xff0c;我创建了一个仓库&#xff0c;里面有2018年到目前为止每日的必应壁纸&#xff0c;在八月份的时候我看到微软有接口文档&#xff0c;于是写了一个服务&#xff0c;每天早上八点钟会获取必应壁纸&#xff08;目前已经可以作为api来使用了&#xff0c…

word打出计算机图形符号,在word插入符号和特殊符号-word技巧-电脑技巧收藏家

在word插入符号和特殊符号打开“插入”菜单&#xff0c;单击“特殊字符”命令&#xff0c;打开“插入特殊符号”对话框&#xff0c;在这个对话框中有六个选项卡&#xff0c;分别列出了六类不同的特殊符号&#xff1b;从列表中选择要插入的特殊字符&#xff0c;单击“确定”按钮…

Android插件化开发基础之静态代理模式

一 Proxy模式 意图&#xff1a; 为其他对象提供一种代理以控制这个对象的访问。 适用性&#xff1a; l 远程代理&#xff08; Remote Proxy &#xff09;&#xff1a; 为一个对象在不同的地址空间提供局部代表。 l 虚代理&#xff08;Virtual Proxy&#xff09;根据需要创建…

史上最强数学科普!

全世界只有3.14 % 的人关注了爆炸吧知识“中国现代数学之父”华罗庚曾说过宇宙之大&#xff0c;粒子之微火箭之速&#xff0c;化工之巧地球之变&#xff0c;生物之谜日用之繁&#xff0c;无处不用数学回首往昔数学始终伴随我们左右纵横交错的几何、繁琐复杂的运算难以求解的方程…

FastCgi与PHP-fpm之间的关系

我在网上查fastcgi与php-fpm的关系&#xff0c;查了快一周了&#xff0c;基本看了个遍&#xff0c;真是众说纷纭&#xff0c;没一个权威性的定义。网上有的说&#xff0c;fastcgi是一个协议&#xff0c;php-fpm实现了这个协议&#xff1b; 有的说&#xff0c;php-fpm是fastcgi进…

QQ在线联系代码

添加图文模块,标题地址:tencent://message/?uin你的QQ号&Sitemyqq&Menuyes “你的QQ号”就写您自己的Q号 图片地址写:http://wpa.qq.com/pa?p1:你的QQ号:13 “你的QQ号”改为您自己的。“13”为图片样式的序号&#xff0c;可以为1-17。 样式1&#xff1a;样式2&#…

服务器 不支持gbk,解决JS请求服务器gbk文件乱码的问题

JS获取服务器编码格式为gb2312的文件时内容为乱码&#xff0c;ajax网络请求内部使用的是XMLHttpRequest&#xff0c;所以在请求之前需要设置一下编码格式&#xff0c;但是设置xhr.setRequestHeader("accept", "text/csv;charsetgb2312,*/*");没有效果&…

C# 死锁的原理与排查方法详解

01—死锁的原理线程死锁是指由于两个或者多个线程互相持有对方所需要的资源&#xff0c;并且互相等待对方释放资源&#xff0c;导致这些线程都处于等待状态&#xff0c;无法继续执行。如果线程都不主动释放所占有的资源&#xff0c;将产生死锁。如果死锁发生在UI线程&#xff0…

Android之category

CATEGORY_ALTERNATIVE设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的actionCATEGORY_APP_BROWSER和ACTION_MAIN一起使用&#xff0c;用来启动浏览器应用程序CATEGORY_APP_CALCULATOR和ACTION_MAIN一起使用&#xff0c;用来启动计算器应用程序CATEGORY_APP_…

人生没有对与错,只是选择不同

全世界只有3.14 % 的人关注了爆炸吧知识你用碎片时间学习、赚钱、与时俱进&#xff0c;还是拿来聊天&#xff0c;消遣&#xff0c;刷视频&#xff1f;碎片时间&#xff0c;拉开人生差距&#xff0c;没有对与错&#xff0c;只是选择不同。人生很多地方都有岔路口&#xff0c;很多…