2010-11-25 2 views
1

StartService()를 사용하여 응용 프로그램의 첫 번째 활동을 OnCreate에서 생성 한 Android 서비스가 있습니다. 이 서비스가 응용 프로그램의 수명, 즉 응용 프로그램의 모든 활동에 걸쳐 실행되어야합니다. 그러나 사용자가 홈 키 또는 뒤로 버튼을 누른 후에는 서비스가 자원을 소비하지 않아야합니다. 모든 활동의 onPause() 메소드에서 서비스를 중지하는 것 이외의 다른 방법은 없습니까?Home 키를 누른 후 Android 서비스가 실행 중입니다.

+0

'자원을 소비하면 안됩니다'는 것은 무엇을 의미합니까? 너 무슨 뜻이야? – xandy

+0

나는 백그라운드에서 실행되는 서비스를 원하지 않는다. – Ananth

답변

1

무엇 대럴이 아니라에서 그 코드를 넣어 제안 예를 들어, 여기이면 MyService 내에 중첩 클래스입니다 Activity를 확장 한 다음, 모든 일반적인 활동에서이를 확장하는 새로운 수업.

나는 당신의 목표를 달성하는 다른 더 우아한 방법을 모른다.

+0

감사. 나에게 잘 보이기 – Ananth

2

StartService를 사용하는 대신 onResume에서 bindService를 호출하고 onPause에서 unbindService를 호출 할 수 있습니다. 열린 바인딩이 없을 때 서비스가 중단됩니다.

서비스에 액세스하려면 ServiceConnection을 만들어야합니다.

class MyService { 
    public static class MyServiceConnection implements ServiceConnection { 
     private MyService mMyService = null; 

     public MyService getMyService() { 
      return mMyService; 
     } 
     public void onServiceConnected(ComponentName className, IBinder binder) { 
      mMyService = ((MyServiceBinder)binder).getMyService(); 
     } 
     public void onServiceDisconnected(ComponentName className) { 
      mMyService = null; 
     } 
    } 

    // Helper class to bridge the Service and the ServiceConnection. 
    private class MyServiceBinder extends Binder { 
     MyService getMyService() { 
      return MyService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return new MyServiceBinder(); 
    } 

    @Override 
    public boolean onUnbind(Intent intent) { 
     return false; // do full binding to reconnect, not Rebind 
    } 

    // Normal MyService code goes here. 
} 

하나를 통해 서비스에 대한 액세스 얻을이 헬퍼 클래스를 사용할 수 있습니다 : 당신이 할 수있는

MyServiceConnection mMSC = new MyService.MyServiceConnection(); 

// Inside onResume: 
bindService(new Intent(this, MyService.class), mMSC, Context.BIND_AUTO_CREATE); 

// Inside onPause: 
unbindService(mMSC); 

// To get access to the service: 
MyService myService = mMSC.getMyService(); 
+0

응답을 주셔서 감사합니다.이 경우에도 모든 활동에서 OnPause 이벤트를 처리해야합니다. – Ananth

관련 문제