본문 바로가기

Android/Process

안드로이드/Android 실행중인 Process 확인 하기~!


 < 개발 환경 > 
   SDK 버전 : 안드로이드 SDK 2.2  
   API LEVEL : 8 
   이클립스 버젼 : Indigo
   테스트단말 : 삼성갤럭시 S2 ICS 4.0.3




안드로이드/Android 실행중인 Process 확인 하기~!



안드로이드 프로젝트를 진행하다 보면, 실행중인 Process(Package)를 확인해야 하는 경우가 생깁니다. Process란 하나의 Package를 실행하는 공간이라고 생각하시면 됩니다. 물론 하나의 Process에서 여러개의 Package를 실행하는 방법이 있다고 하지만 일반적으로 하나의 Process는 곧 Package라고 생각하시면 됩니다.



그리고 안드로이드에서는 하나의 Package를 하나의 어플리케이션으로, 고유의 어플리케이션으로 인정하는 시스템 입니다. 중복을 허용하지 않는 고유의 Package명으로 관리하기 때문에, 모든 어플리케이션은 독자적인 패키지명을 갖게 됩니다.


하나의 "Package = 어플리케이션"이 됩니다. 그렇다면 "Process = 어플리케이션" 이라는 공식이 성립되겠죠? 그렇습니다. 쉽게말해 하나의 Process는 하나의 어플리케이션이 됩니다.


그러므로 Process 실행여부를 확인한다는 것은, 다시말해 어플리케이션의 실행여부를 확인하는 것 입니다. 자 그럼 어플리케이션의 실행여부를 확인 하는 방법을 알아 보겠습니다.


package arabiannight.tistory.com.isrunningprocess;

import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;

public class TestisRunningProcessActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		boolean temp = isRunningProcess(this, "arabiannight.tistory.com.aynctask");
		Toast.makeText(this, "" + temp, Toast.LENGTH_LONG).show();

	}

	/**
	 * Process가 실행중인지 여부 확인.
	 * @param context, packageName
	 * @return true/false
	 */
	public static boolean isRunningProcess(Context context, String packageName) {

		boolean isRunning = false;

		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);                      

		List list = actMng.getRunningAppProcesses();     

		for(RunningAppProcessInfo rap : list)                           
		{                                
			if(rap.processName.equals(packageName))                              
			{                                   
				isRunning = true;     
				break;
			}                         
		}

		return isRunning;
	}
}
//


Process 확인을 할때 Package명을 입력해 주는데요. 그렇게 하면 해당 어플리케이션의 실행 여부를 확인 할 수 있습니다.


스크린샷 : 


"arabiannight.tistory.com.aynctask" 어플리케이션을 실행하지 않았을 때 와 오른쪽은 해당 어플리케이션을 실행한 후 홈키로 내려 놓은 상태입니다. 


안드로이드 OS는 Process를 우선 순위에 따라 관리하게 되는데요. 해당 어플리케이션이 현재 Foreground 상태이면, Foreground Process로 관리 되고, 해당 어플리케이션을 홈키로 내리는 경우는, Background Process 형태로 관리 하게 됩니다. 


현재 스크린샷에는 홈키로 나와서 새로운(TestisRunningProcess) 어플리케이션을 실행 했기 때문에, 이전 어플리케이션은  Background Process로 전환 되지만, 실행중인 Process로 간주되기 때문에, 토스트 메시지가 true로 뜨는 것을 확인 할 수 있습니다.


안드로이드 OS는 우선 순위에 따라 10여가지 형태로 Process를 관리하게 됩니다.



파일첨부 : 

TestisRunningProcess.zip



감사합니다.