다음처럼 10분마다 서버에 접속해 JSON으로 반환받아 푸시를 처리하는 서비스를 추가했습니다.

그런데 어플의 크기는 3메가정도인데 메모리에는 20메가 이상이 올라가 있습니다.

그리고 10분마다 실행될때마다 크키가 커지는 현상도 보이는데 아래의 소스도 구글링으로 사용한 터라

어떻게 문제를 해결해야 할지 모르겠습니다.

푸시는 결국 C2DM을 사용하겠지만 현재와 같은 서비스의 문제에 대한 해결은 어떻게 될지 부탁드립니다.

 

public class MyService extends Service implements Runnable { 
    // 시작 ID
    private int mStartId;
    // 서비스에 대한 스레드에 연결된 Handler. 타이머 이용한 반복 처리시 사용.
    private Handler mHandler;
    // 서비스 동작여부 flag
    private boolean mRunning;
    // 타이머 설정 (10분)
    private static final int TIMER_PERIOD = 60 * 10 * 1000;
    private int mCounter;
   
 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 
    // 서비스를 생성할 때 호출
    public void onCreate() {
        Log.e("MyService", "Service Created.");
        super.onCreate();
        mHandler = new Handler();
        mRunning = false;
    }

    public void onStart(Intent intent, int startId) {
     if (App.DEBUG)
      Log.e(TAG, "-------------------------------------------------------Service startId = " + startId);
        super.onStart(intent, startId);
        mStartId = startId;
        mCounter = COUNT;

        // 동작중이 아니면 run 메소드를 일정 시간 후에 시작
        if (!mRunning) {
              // this : 서비스 처리의 본체인 run 메소드. Runnable 인터페이스를 구현 필요.
              // postDelayed : 일정시간마다 메소드 호출
              mHandler.postDelayed(this, TIMER_PERIOD);
              mRunning = true;
        }
    }
   
    // 서비스의 종료시 호출
    public void onDestroy() {
        // onDestroy가 호출되어 서비스가 종료되어도
        // postDelayed는 바로 정지되지 않고 다음 번 run 메소드를 호출.
        mRunning = false;
        super.onDestroy();
    }
   
 @Override
 public void run() {
        if (!mRunning) {
            // 서비스 종료 요청이 들어온 경우 그냥 종료
         if (App.DEBUG) Log.e("MyService", "run after destory");
         return;
        } else {
         // 서버에 접속하여 JSON 값을 리턴받아 처리 하는 작업...
         
            // 다음 작업을 다시 요구
            //Log.e("MyService", "mCounter : " + mCounter);
            mHandler.postDelayed(this, TIMER_PERIOD);
        }
 }
}