Listando os processos ativos no Android sem utilizar ps (activities e services)

Neste arquivo vou mostrar como obter os processos Android rodando (activities e services) sem utilizar o comando ps do sistema operacional diretamente. É sempre bom lembrar que utilizar a API alta do Android proporciona maior portabilidade entre dispositivos. Sempre que puder, utilizar a API alta java do Android ao invés de utilizar comandos linux diretamente. Lembre-se que existem diferenças, e às vezes, diferenças grandes entre fabricantes, ROMS e Kernels.

Para obter estes processos você deve utilizar a ActivityManager do próprio Android.

Activity

Para activities utilize o método getRunningTasks

            final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

            final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
    
            for (int i = 0; i < recentTasks.size(); i++)
            {
                // Pega o nome do pacote da activity executando
                String ac = recentTasks.get(i).baseActivity.getPackageName();

            }

Services

Para services utilize o método getRunningServices

            final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

final List<RunningServiceInfo> recentServices = activityManager.getRunningServices(Integer.MAX_VALUE);
            
            for (int i = 0; i < recentServices.size(); i++)
            {

               // Obtem o nome do service
                String sv = recentServices.get(i).process;

                }
            }

Não se esqueça de incluir no AndroidManifest.xml a permissão

<uses-permission android:name=”android.permission.GET_TASKS”/>

NOTA 1: Trabalhando com services você pode ter a surpresa de receber mais de uma ocorrência do mesmo services utilizando o método getRunningServices. Para resolver este problema, veja a propriedade recentServices.get(i).pid. Somente estarão ativos os services com pid diferente de 0.

NOTA 2: Este método não obtém os processos internos do Android como zygote por exemplo.

Add Comment

Your email address will not be published. Required fields are marked *

Phone: (31) 3646-1612
Fax: (31) 3646-1614
Loja 01, Lourdes, Belo Horizonte/MG
Rua Rio de Janeiro, 1278