Comprobar si mi aplicación se está ejecutando en Android

Tengo una aplicación que implica piscina de sonido – Al inicio de la aplicación todos los sonidos se cargan después de que la pantalla principal se carga.

Ahora, quisiera comprobar si la aplicación está funcionando – si no está funcionando quisiera recargar la aplicación – si está funcionando no quiero recargar la aplicación.

Para lo cual probé lo siguiente:

ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.me.checkprocess")) { Log.e("Result", "App is running - Doesn't need to reload"); } else { Log.e("Result", "App is not running - Needs to reload); } } 

Esto da los resultados a la perfección, pero sigue comprobando hasta que procInfos.size es menor que 0. Hasta que la aplicación obtiene el proceso com.me.checkprocess true – siempre es falsa? Por lo que siempre se pone en la otra parte primero.

Así por ejemplo: Si el proceso total es 30. Y mi proceso com.me.checkprocess se está ejecutando @ 29th. Cuando se ejecuta la condición. Hasta el 28º proceso es otro y @ 29º proceso se pone en la condición verdadera.

¿Cómo arreglar esta parte – Me gustaría llegar a otra parte sólo después de que el proceso total está marcada?

¡Házmelo saber!

Creo que solo puedes agregar

 break; 

abajo

 Log.e("Result", "App is running - Doesn't need to reload"); 

Declaración if in

Basta con poner un descanso en el interior del bucle for.

  for(...){ if(){ break; } } 

Esto definitivamente no es limpio, pero hace lo que quieres.

** EDIT 2

Creo que sería más fácil si sólo extraer esta tarea en un método.

 public boolean isProcessRunning(String process) { ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if (procInfos.get(i).processName.equals(process)) { return true; } } return false; } public static void main(String[] args) { if (isProcessRunning("my_process")) { // Do what you need } else { // restart your app } } 

Esto es lo que deberías hacer.

  if(procInfos.get(i).processName.equals("com.me.checkprocess")) { Log.e("Result", "App is running - Doesn't need to reload"); break; } 

Las otras respuestas enumeradas funcionarán, pero estoy de acuerdo con c4pone – en un bucle como éste, break parece una mala manera de hacerlo – sobre todo porque usar una break significa que si agregas otra condición alrededor de tu sentencia if, hay una oportunidad Que la break ya no puede funcionar al salir del bucle for – de alguna manera es análoga a una declaración goto en otros idiomas

Otra alternativa a su problema es esta:

 for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.me.checkprocess")) { Log.e("Result", "App is running - Doesn't need to reload"); i = procInfos.size(); } else { Log.e("Result", "App is not running - Needs to reload); } } 

Que también romper el bucle, ya que establece su variable contador a la cláusula de terminación, es decir, una vez que se encuentra, el bucle de salida.

EDITAR:

Después del comentario del OP abajo, tengo la sensación de que la solución que él quiere es la siguiente:

 boolean found = false; for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.me.checkprocess")) { found = true; } } if(found) { Log.e("Result", "App is running - Doesn't need to reload"); i = procInfos.size(); } else { Log.e("Result", "App is not running - Needs to reload); } 

Lo que no tiene nada que ver con salir del bucle prematuramente, como todos nosotros pensamos al leer la pregunta, sino que es en vez de producir el resultado una vez

  public static boolean isAppRunning(Context context) { 

// comprobar con la primera tarea (tarea en primer plano) // en la lista de tareas devueltas

  ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); if (services.get(0).topActivity.getPackageName().toString().equalsIgnoreCase(context.getPackageName().toString())) { return true; } return false; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.