티스토리 뷰

반응형

우리는 안드로이드 프로그램을 제작할 때 안드로이드 스튜디오에서 프로젝트를 생성한 후 프로젝트 단위로 프로그램을 제작하게 된다. 그러면 여기서 궁금증이 생기는데,

 

과연 하나의 Package 내부의 코드는 하나의 Process로써 동작할까 ?

 

답은 "별 다른 설정이 없다면 그렇다 !!" 이다.

그러면 어느경우에 위에서 말한 별 다른 설정을 해줄까?

그리고 하나의 Process로써 동작하게되면 발생할 수 있는 문제에는 어떤 것이 있을까?

 


 

* 만약에 하나의 패키지에 Activity, Receiver, Service를 모두 구현했다면 ?

   1. Background에서 Service가 계속 실행되고, Activity는 Foreground에서 실행된다.

     이 때 Activity에서 Exception이 발생하게 된다면 해당 프로세스는 Crash가 나게 되는데,

     Activity, Receiver, Service는 현재 하나의 프로세스에서 동작하고 있기 때문에,

     Activity에서의 Exception에 의해 Background에서 동작해야되는 Service까지 같이 죽게된다.

 

   2. 자원을 공유하기 때문에 서로의 성능에 영향을 미친다.

      예를 들면, Activity의 코드가 무거워 자원을 지나치게 많이 사용할 경우 Service의 성능이 저하되고,

      반대로 Service에서 자원을 많이 사용할 경우 Activity의 성능이 저하된다.

 

   3. 자원 뿐만아니라 메모리에 있어서도 충돌의 가능성이 존재한다.

 

 

* 그렇다면 위의 문제점들때문에 반드시 Process를 분리해줘야 하는가 ?

   1. 분리시 하나의 Process가 추가되는 것이기 때문에 OverHead가 하나 더 추가되는 것이므로,

      시스템 전체의 입장에서 봤을 때는 자원의 손해가 발생한다.

   

   2. 단순한 데이터 공유는 불가능하다. ( 전역변수, static변수 등등 )

      때문에 반드시 IPC, RPC라는 특수한 방법을 사용해서 데이터 공유를 해야한다.

        ( 매우매우매우매우 번거롭다... )

 

 


 

<결론> 그렇다면 도대체 언제 Process를 분리해줘야하는가...?

   1. 우선 주로 Process를 분리하게 되는 Component는 Service이다. 

      위의 내용을 봤을 때 Background에서 작동하는 녀석도 Service고 자원, 메모리를 사용하는 것도

      특정 상황에서만 동작하는 Receiver가 아니라 Service이기 때문이다.

 

   2. Service의 덩치가 크고 하는일이 많다면 Process를 분리하는 방향으로 !!

          ( Memory 사용량이 높아지면 )

 

 

 

그렇다면 분리를 하지 않는다면 어떻게 코딩을 해야할까?

  - Service에 존재하는 생명주기함수들은 모두 Process의 Main Thread에서 동작을 한다.

    그러므로 리를 하지 않는다면 생명주기함수들의 덩치는 반드시 최소화 해주어야 하고

    대부분의 작업들을 Sub Thread를 생성해서 진행해주는 것이 좋다.

  

  - 그리고 반드시 ANR에 대한 내용도 신경을 써줘야 할 것이다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함