AndroidでのActivity Managerの使用例

10136 ワード

Activity Managerでは、プロセス(Process)など、システムで実行されているactivities、アプリケーション/パッケージ、サービス(Service)、タスク(Task)などの情報を入手できます.
1、サービスが実行されているかどうかを判断する
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、実行中のサービス情報を取得する
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で実行中のサービスを取得する