2013-02-18 3 views
2

클래스없이 Android-Service를 시작할 수있는 방법을 찾고 있습니다. 다음과 같은 많은 예제를 발견했습니다..class없이 Android 서비스 시작

startService (새 인 텐트 (this, TheService.class));

서비스 클래스를 넣고 싶지 않고 수동으로 중지 할 때까지 계속 서비스를 실행하고 싶습니다.

매개 변수없이 일부 소켓 만 열어야하기 때문에 서비스의 인터페이스가 필요하지 않습니다.

서비스 실행 시간은 앱의 실행 시간에 따라 달라져서는 안됩니다. 서비스를 필요로하는 첫 번째 앱은 앱을 시작해야하며 앱이 수동으로 중지 될 때까지 실행해야합니다.

그래서 BroadcastReceiver는 짧게 사용하기 때문에 사용할 수 없습니다. 서비스에 바인딩하면 서비스를 중지시키는 바인딩 해제로 연결됩니다 (원하지 않는 서비스).

서비스의 .class없이 시작 서비스를 사용할 수있는 방법이 있습니까? 대안 : 시작한 앱에 평생을 연결하지 않는 서비스에 바인딩하는 방법이 있습니까?

+0

을 : _i는 브로드 캐스트 리시버를하기 때문에 사용할 수 없습니다 BroadcastReveiver 및 Services의 수명주기 동안 BroadcastRiveriver를 통해 오래 실행되는 서비스를 시작할 수 있기 때문에 추론이 여전히 잘못되었음을 알지 못하는 것처럼 너무 짧게 들립니다. 또한 서비스에 대한 _binding_은 Activity 객체의 응용 프로그램 수명주기와 관련이 있지만 _binding_ 시간 범위는 반드시 서비스의 _running_ 기간과 일치 할 필요는 없습니다. 그러므로 오해에 기반한 디자인 결정을하지 마십시오. –

+0

'Service'가 자신의 수명을 제어하고 싶다면 여전히 bind/unbind를 사용하여 이것을 할 수 있습니다. 클라이언트가 bind 할 때,'service'는 자동적으로 멈추지 않도록 클라이언트가 바인딩을 해제 할 때 (onBind()에서'startService()'를 호출함으로써) 시작될 수 있습니다. '서비스'는 종료 준비가 될 때마다 멈출 수 있습니다. –

답변

3

이름으로 시작할 수 있습니다. 이처럼 :

startService(new Intent("com.whatever.servicename")); 

당신은 서비스로 APK에 텐트 필터를 추가해야합니다 : 그것은 잘못된 디자인 결정으로 이어질 수 있다고해서

<intent-filter> 
    <action android:name="com.whatever.servicename" /> 
    </intent-filter> 
+0

"이름으로 시작"이라고 말하면 실제로 "의도대로 시작"을 의미합니다. 이론적으로, "com.whatever.servicename"은 "fred-and-ethel-take-out-out-the-garbage"또는 "GobbledyGook123"이 될 수 있습니다. ACTION 키는 피할 수있는 완전한 패키지 이름으로 시작해야하지만 갈등. 이와 같이 ACTION으로 서비스를 시작하면 Android는 설치된 모든 패키지를 검색하여이 ACTION과 일치하는 인 텐트 필터가있는 서비스를 찾습니다. –