2016-06-22 2 views
1

start 메서드가있는 프레임 워크를 캡슐화하는 Android 서비스가 있습니다. 이 서비스는이 같은 것으로 귀결, 많은 것들이 생략 :응용 프로그램 시작시 서비스 바인드 및 시작

public class MyServiceBridge implements ServiceConnection { 

    private boolean started = false; 
    private boolean bound = false; 
    private MyService myService; 

    public MyServiceBridge(Context context){ 
     this.context = context; 
    } 

    public void bindService(){ 
     Intent intent = new Intent(getContext(), MyService.class); 

     getContext().bindService(intent, this, getContext().BIND_AUTO_CREATE); 
     getContext().startService(intent); 
    } 

    // Here's a sample call, and the one that is relevant 
    public void start(Map<String, Object> options){ 
     setOptions(options); 
     if(bound == true){ 
      getMyService().start(options); 
     } 
     else{ 
      started = true; 
     } 
    } 
} 

내가 실행하기 위해 다리의 start 메소드를 호출

public class MyService extends Service { 

    private IBinder thisBinder; 

    public MyService(){ 
     thisBinder = new LocalBinder(); 
    } 

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

    public void start(Map<String, Object> options) 
    { 
     getDriverManager().start(options); 
    } 
} 

내가 또한 서비스 호출을 브리징 클래스가 서비스. 이것은이 특별한 상황을 제외하고는 잘 작동합니다 (지금까지). MyApplication 클래스는 onCreate에 다리의 시작 메서드를 호출

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 

     super.onCreate(); 

     getServiceBridge().start(null); 
    } 
} 

이것은, according to the docs은 "응용 프로그램이 시작할 때 모든 활동, 서비스, 또는 수신기 객체 전에 생성 된 (콘텐츠 제공 업체 제외), 호출합니다."입니다. 서비스가 시작되지 않기 때문에 실제로 앱이 종료 될 때 시작됩니다 (이상한 경우). 이것은 액티비티의 onCreate 메서드로 호출을 이동하면 작동하지만, 서비스를 중지 할 수도 있기 때문에 이상하지 않습니다. 앱 수명주기 동안 서비스를 실행하고 싶습니다. 즉, 앱이 시작될 때 서비스가 시작되고 앱이 종료 될 때 서비스가 중지되어야합니다. 이게 말이 돼? 이것을 할 또 다른 방법이 있습니까?

+0

'onCreate'메소드가 Application 클래스에서 호출 되었습니까? 아니요? –

+0

예, 메소드가 호출됩니다! 그러나 이것과 @ vanste25의 대답은 내가 백그라운드에서 실행중인 서비스와 관련이 있다는 것을 깨닫게했습니다. 이 방법은 앱을 두 번째 실행해도 호출되지 않는 것 같아서이 말을합니다. –

답변

2

제 생각에는 응용 프로그램 onCreate에서 서비스를 실행하기로 결정했을 때 좋은 결과를 얻었습니다. 하지만 응용 프로그램을 닫을 때 서비스가 시작되었다는 이야기는 이상합니다. 이 작업을 여러 번 수행했으며 서비스는 호출되어야하는 onCreate 응용 프로그램에서 시작됩니다.

응용 프로그램이 작동 중이며 백그라운드로 실행 중인지 확인 했습니까? 테스트하기 전에 신청서를 작성했는지 확인하십시오. 작업 킬러 또는 이와 유사한 것을 사용하여 응용 프로그램을 항상 새로 시작해야합니다.

안타깝게도 Android가 애플리케이션을 종료 할 때 시스템이 종료하고 무료 리소스를 결정할 때까지 살아 있기 때문에 안타깝게도 Android는 애플리케이션을 종료 할 때이를 알려주는 적절한 메커니즘이 없습니다.

+0

거기서 시작하면 서비스 _do_ work가 보입니다. 그것은 내가 그랬던 것에서 제외됩니다. 그래도 응용 프로그램 (또는 서비스)이 종료 될 때 실제로 메소드를 사용할 수 있습니다. 이 응용 프로그램은 조금 정리가 잘되어 있습니다 (라우터와 같은 외부 장치를 사용함). 이제는 서비스를 시작할 수 있다는 것을 알았습니다. 디버깅을 위해 더 많은 시간을 할애 할 것입니다. 감사! –

+0

당신을 환영합니다. startService와 bindService를 순차적으로 호출하는 것에주의하십시오. getContext(). bindService (intent, this, getContext() .BIND_AUTO_CREATE); getContext(). startService (intent); 어쩌면 문제가있을 수 있습니다. – vanste25

+0

정말요? 왜 그런가요? –

관련 문제