activty, service 연동하려합니다.

activty에서 service를 시작하는 버튼, 중지하는 버튼 두개를 만들었는데,

 

activity에서 serviceStart()를 하면, service클래스에서 onStart()가 불러지긴합니다. 그런데, 그러고 나서

activity에서 serviceStop()을 하면, service클래스에서 onDestroy()가 불러지질 않습니다.

 

혹시나 해서, ServiceConnection객체때문인가 해서 주석처리하고 했더니, 제대로 작동은 합니다.

이 객체를 생성하고 메서드가 세팅될때 문제가 생긴거같은데.. 도저히 모르겠네요..

(참고로 안드로이드 공부중입니다.)

 

 

 

소스는 다음과 같습니다. 문제점좀 찾아주세요^^ㅠㅠ;

 

액티비티---------------------------------------------------

public class ServiceTest2Activity extends Activity {

    BackgroundService serviceBinder;

    public void onCreate(Bundle savedInstanceState) {

       ...

       ...start, stop버튼 생성 작업..

        startBtn.setOnClickListener(new OnClickListener(){
         public void onClick(View v){
             serviceName
              = startService(new Intent(ServiceTest2Activity.this, BackgroundService.class));  
          Log.w("ST2Activity", "service start, serviceName:"+serviceName.toShortString());
         }
        });
        stopBtn.setOnClickListener(new OnClickListener(){
         public void onClick(View v){
          stopService(new Intent(ServiceTest2Activity.this, serviceName.getClass()));
          Log.w("ST2Activity", "service stop, serviceName:"+serviceName.toShortString());
         }
        });

       ...

       ...

        ServiceConnection srvConnection = new ServiceConnection(){
             public void onServiceConnected(ComponentName className, IBinder service) {
                  Log.w("ST2Activity", "service connect1");
                  serviceBinder = ((BackgroundService.bsBinder)service).getService();
                  Log.w("ST2Activity", "service connect2");
             }
             public void onServiceDisconnected(ComponentName className) {
                  Log.w("ST2Activity", "service disconnect");
                  serviceBinder = null;
             }
        };       
        Intent intent = new Intent(this, BackgroundService.class);
        Log.w("ST2Activity", "service binding");
        bindService(intent, srvConnection, Context.BIND_AUTO_CREATE); 

    }

}

 

 

서비스---------------------------------------------------

public class BackgroundService extends Service {

      private IBinder binder;

     ....서비스 작업...

      public void onCreate(){
            binder = new bsBinder();
            super.onCreate();
      }

       public class bsBinder extends Binder{
            BackgroundService getService(){
                  Log.w("ST2Service", "service getService() call");
                  return BackgroundService.this;
            }
      }
      public IBinder onBind(Intent intent) {
            return binder;
      }

}

 

 

이렇게 바인딩 하는 부분만 편집했습니다. 위에서 stop버튼을 누를떄 로그로 serviceBinder 를 확인해보니깐 클래스가 잡혀있긴합니다.

근데... start버튼을 눌르고 service가 시작후에 stop버튼누르면 서비스의 destroy가 호출이 안됩니다...  ㅠㅠ