



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么判断一个应用是否在运行
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表系统后台有此进程在运行,具体要做如何判断就看自已的业务需求。这个类还有更多的方法可以取得系统运行的服务、内存使用情况等的方法,请各位自行查找。有一点要注意,如果想正常运行此方法,请在你的AndroidManifest.xml中加入:<uses-permission
android:name="android.permission.GET_TASKS"
/>关于AndroidManifest权限控制详细内容可参考AndroidManifest功能与权限描述大全/**
*
判断应用是否在运行
*
@param
context
*
@return
*/
public
boolean
isRun(Context
context){
ActivityManager
am
=
(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo>
list
=
am.getRunningTasks(100);
boolean
isAppRunning
=
false;
String
MY_PKG_NAME
=
"com.ad";
//100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此进程在运行
for
(RunningTaskInfo
info
:
list)
{
if
(info.topActivity.getPackageName().equals(MY_PKG_NAME)
||
info.baseActivity.getPackageName().equals(MY_PKG_NAME))
{
isAppRunning
=
true;
Log.i("ActivityService
isRun()",info.topActivity.getPackageName()
+
"
info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
break;
}
}
Log.i("ActivityService
isRun()",
"com.ad
程序
...isAppRunning"+isAppRunning);
return
isAppRunning;
}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);
}/**get
the
launcher
status
*/
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(cessName))
{
result
=
true
;
break;
}
}
}
}
return
result
;
}/**
*
得到所有的Launcher
*/
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如何判断程序是否在前台运行:private
boolean
isTopActivity(){
List<RunningTas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 崂山区小学招生数学试卷
- 绿色建筑中的节水技术应用
- 建筑垃圾分拣消纳基础设施建设项目投资计划书
- 高速公路服务区类型选择与优化研究
- 直销项目管理办法
- 济南会销管理办法
- 淮北投标管理办法
- 竞争立项管理办法
- 现场用工管理办法
- 税收指标管理办法
- SX-600驻波功率计说明书
- (完整word版)中医学题库
- GB/T 27775-2011病媒生物综合管理技术规范城镇
- GB/T 16841-2008能量为300 keV~25 MeV电子束辐射加工装置剂量学导则
- GB/T 15585-1995热塑性塑料注射成型收缩率的测定
- 香港公司条例
- 抚州市金溪县乡镇街道社区行政村统计表
- 2022年山东华鲁恒升集团有限公司招聘笔试题库及答案解析
- 生产岗位员工培训体系的建立.ppt
- 石.河砂出厂合格证(改)
- 加油站评审标准
评论
0/150
提交评论