RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

보통 Service 를 실행시키고 종료시에는 그에 걸맞는 UI 업데이트를 Activity내에서 시킨다.

문제는 User 가 하나의 Activity 에서만 머무를 것이라는 보장은 없다는 것이다.
이럴 때는 다른 Activity를 실행할 때 마다, 현재 실행중인 Service 를 체크할 필요성이 생긴다.

만약 Service가 실행중이라서, 다른 UI를 보여줄 필요성이 생긴다면... Service 를 체크하는 일은 의무가 되어버린다.

크게 2가지 방법을 사용하는데,
첫번째는 현재 디바이스에서 실행되는 RunningService 목록중에서 Service목록을 찾는것이고,

두번째는 Service를 시작할때 반환되는 ComponentName 값을 static형태로 박아놓고 null여부를 체크한다.
Service가 살아있다면 null 이 아니겠지???

첫번째 방법은 아래의 코드로 구현가능하다.

private boolean getServiceTaskName() {


boolean checked = false;

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

List<ActivityManager.RunningServiceInfo> info;

info = am.getRunningServices(30);


for(Iterator iterator = info.iterator(); iterator.hasNext();) {

RunningServiceInfo runningTaskInfo = (RunningServiceInfo) iterator.next();

Log.i(TAG, "Service name :runningTaskInfo.service.getClassName());

if (runningTaskInfo.service.getClassName().equals("내 패키지명")) {

checked = true;

Log.i(TAG2, "Service is.... : " + checked);

}

}

return checked;

}



사용자 삽입 이미지
























하지만 디바이스내 실행되는 서비스 목록이 많다면... 다소 시간이 걸릴수도 있겠으며...

토나올수도 있을것이다.


두번째 방법은 아래코드 처럼 더더욱 간단히 구현 가능하다.

static 형태로 저장한다면, 서비스를 중지 시킬때도 꽤 유익하게 사용할 수 있을것이다.


ComponentName serviceName = startService(serviceIntent);


Intent i = new Intent();

i.setComponent(serviceName);

stopService(i);


또 한가지, 모든 Service를 한 Activity 내에서 종료하지는 않을 것이다...대게는??

Service 를 구현하고 있는 class 내에 stopSelf(); 함수로 종료시켜주자.


2012/01/16 20:39 2012/01/16 20:39
http://stbaeya.com/tc/trackback/367
[로그인][오픈아이디란?]
빡드로이드^^:강의문의  010.9170.9218
강의문의 010.9170.9218
Blog (255)
Wedding Photography (40)
Daily Photo (14)
Flex (10)
Flash (63)
프로그래밍 (23)
Digital (2)
Etc (3)
안드로이드 개발 (11)
안드로이드 Tip (71)
아이폰 개발 (4)
GUI Resource (7)
Photoshop (2)
UX (2)