【移动应用开发技术】Android中怎么判断一个应用是否在运行_第1页
【移动应用开发技术】Android中怎么判断一个应用是否在运行_第2页
【移动应用开发技术】Android中怎么判断一个应用是否在运行_第3页
【移动应用开发技术】Android中怎么判断一个应用是否在运行_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论