Android中ActivityManager的使用案例

翻译 2015年11月18日 15:48:47

通过ActivityManager我们可以获得系统里正在运行的activities,包括进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。

1、判断某个Service是否正在运行

private boolean isFlightServiceRunning(){
  ActivityManager manager=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
  for (  RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
    if ("com.barbermot.pilot.ui.FlightService".equals(service.service.getClassName())) {
      return true;
    }
  }
  return false;
}

2、获取某个正在运行的Service信息

private ActivityManager.RunningServiceInfo liveServiceInfo(){
  ActivityManager manager=(ActivityManager)context().getSystemService(Context.ACTIVITY_SERVICE);
  List<ActivityManager.RunningServiceInfo> infos=manager.getRunningServices(100);
  for (  ActivityManager.RunningServiceInfo info : infos) {
    if (info.service.getClassName().equals(LiveShowService.class.getName())) {
      return info;
    }
  }
  return null;
}

3、判断是否有应用访问外部存储

private boolean hasAppsAccessingStorage() throws RemoteException {
  ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  List<ApplicationInfo> list=am.getRunningExternalApplications();
  if (list != null && list.size() > 0) {
    return true;
  }
  return false;
}

4、杀掉某个进程

private void killProcesses(){
  if (mPackages == null)   return;
  ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  for (int i=0; i < mPackages.length; i++) {
    am.forceStopPackage(mPackages[i]);
  }
}

5、判断是否低内存

private static boolean isLowMemory(Context context){
  if (null == context) {
    return false;
  }
  ActivityManager am=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
  ActivityManager.MemoryInfo outInfo=new ActivityManager.MemoryInfo();
  am.getMemoryInfo(outInfo);
  return outInfo.lowMemory;
}

6、清理用户数据

private void initiateClearUserData(){
  mClearDataButton.setEnabled(false);
  String packageName=mAppEntry.info.packageName;
  Log.i(TAG,"Clearing user data for package : " + packageName);
  if (mClearDataObserver == null) {
    mClearDataObserver=new ClearUserDataObserver();
  }
  ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  boolean res=am.clearApplicationUserData(packageName,mClearDataObserver);
  if (!res) {
    Log.i(TAG,"Couldnt clear application user data for package:" + packageName);
    showDialogInner(DLG_CANNOT_CLEAR_DATA);
  }
 else {
    mClearDataButton.setText(R.string.recompute_size);
  }
}

7、获取内存信息

private void update_labels(){
  MemoryInfo mem_info;
  double mem_size;
  mem_info=new ActivityManager.MemoryInfo();
  activity_man.getMemoryInfo(mem_info);
  mem_size=(mem_info.availMem / (CONVERT * CONVERT));
  availMem_label.setText(String.format("Available memory:\t %.2f Mb",mem_size));
  numProc_label.setText("Number of processes:\t " + display_process.size());
}

8、指定pid是否正在运行

private boolean isPidRunning(int pid){
  if (mActivityManager == null)   mActivityManager=(ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
  List<RunningAppProcessInfo> l=mActivityManager.getRunningAppProcesses();
  Iterator<RunningAppProcessInfo> i=l.iterator();
  RunningAppProcessInfo info;
  while (i.hasNext()) {
    info=i.next();
    if (info.pid == pid)     return true;
  }
  return false;
}

9、获取指定App的顶部Activity

private ComponentName getActivityForApp(RunningAppProcessInfo target){
  ComponentName result=null;
  ActivityManager.RunningTaskInfo info;
  if (target == null)   return null;
  if (mActivityManager == null)   mActivityManager=(ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
  List<ActivityManager.RunningTaskInfo> l=mActivityManager.getRunningTasks(9999);
  Iterator<ActivityManager.RunningTaskInfo> i=l.iterator();
  while (i.hasNext()) {
    info=i.next();
    if (target.processName.contains(info.baseActivity.getPackageName())) {
      if (DEBUG)       Slog.i(TAG,"getActivityForApp(" + target.processName + ") found the following activity (topActivity /// baseActivity): "+ info.topActivity.toString()+ " /// "+ info.baseActivity.toString());
      result=info.topActivity;
      break;
    }
  }
  return result;
}

原文:
Java Code Examples for android.app.ActivityManager

可参考文章:
1、Android中获取系统内存信息以及进程信息

2、Android中获取正在运行的应用程序

3、Android中获取正在运行的服务

相关文章推荐

ActivityManager的使用

我们再开发的时候,往往会碰到,当用户完成某个操作的时候,前期经历的页面都在后台关闭,而操作失败,则页面不关闭,那么我们就想到了ActivityManager的使用(上一篇文章写的使用任务栈的方式,因为...

Android之ActivityManage长用方法总结

Android 如何判断一个应用在运行  在一个应用中,或一个Service 、Receiver中判断一个应用是否正在运行,以便进行一些相关的处理。 这个时候我们需要得到一个ActivityMan...

Android中ActivityManager(AM)的方法解释和几个使用场景介绍

1、ActivityManager是众多系统服务中的一种.在程序中获取am实例的方法: ActivityManager am = context.getSystemService(ACTIVIT...

Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解

转载请注明出处:http://blog.csdn.net/qinjuning                    ...

ActivityManager

android.app.ActivityManager 这个类主要用来管理所有设备上的Activities。 权限:android.permission.GET_TASKS 方法:| 返回类型    ...

Android之ActivityManager简介(一)

本文主要内容是讲解一下关于Android中的ActivityManager,这个类可以得到“设备配置的属性”,"进程信息","任务信息",“服务”,“正在运行的程序” 因此通过这个类,我们可...

Android一些关键函数和类的分析-ActivityManager

ActivityManager能实现的功能可以从其具备的函数中进行分析: 1.getFrontActivityScreenCompatMode() -->获取最上层Activity的兼...

Android自定义控件三部曲文章索引

前言:在我从C++转到Android时,就被Android里炫彩斑斓的自定义控件深深折服,想知道如果想利用C++实现这些功能,那是相当困难的。从那时候起,我就想,等我学会了自定义控件,一定要写一篇系列...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)