IntentService가 을 건너 뛰었습니다. "XX 프레임 건너 뜀! 응용 프로그램이 주 스레드에서 너무 많은 작업을 수행하고있을 수 있습니다." LogCat에 메시지가 표시되지만 이유를 모르겠습니다.Android IntentService UI 속도 저하
저는 P2P 중개자와 통신하는 앱을 만들고 있습니다. 나는 모든 통신 로직을 서비스로 옮기기로 결정했다. 처음에 나는 그 방식으로 일을했다 : 그것은 내가 모든 로직을 처리하는 작업자 스레드를 생성하지 않은 경우에도 확인을 실행
class MyService extends Service {
@Override
onCreate() {
// This info need to stay up as long as the context is
stablishEndpointAndTransport();
}
@Override
onStartCommand(Intent intent, int startId) {
registerAccountId(intent.getIntExtra(EXTRA_ACCOUNT_ID));
}
@Override
IBinder onBind(Intent intent) {
super.onBind(intent);
}
@Override
onDestroy() {
if (registeredAccount) deleteAccount();
deleteTransportAndEndpoint();
}
}
. 그러나 더 많은 연결 로직을 구현해야 할 필요가 있기 때문에 로직을 IntentService로 이동하기로 결정했습니다. 백그라운드 작업자 스레드의 모든 것을 처리하기 때문입니다.
은 내가 한 모두는 IntentService
에 기본 클래스의 이름을 바꾸 onHandleIntent()
에 onStartCommand()
방법의 내용을 이동, 특정 경우에 일정한 조치를 지정하고 onStartCommand()
및 onBind()
재정의를 삭제했다.
어떻게 변경 사항이 메인 스레드의 성능에 영향을 미칩니 까?
편집
관련이 있지만, 프레임 워크에서 모두 stablishEndpointAndTransport()
및 registerAccountId()
실행 몇 가지 방법은 비동기이다이 될 수 있습니다. 특히 브로커와 통신하는 방법은 다음과 같습니다. 그 말은, 나는 hardwork가 이미 다른 스레드에서 실행 되었기 때문에 IntentService
을 포기할 수도 있습니다 (설명 : 실제로 실제로 잘 실행되는 이유는 Service
). 그래도 나는 IntentService
이 UI 스레드 스킵 프레임을 만드는 이유를 알지 못합니다. 당신이 IntentService는 작업자 스레드를 생성하고 서비스를 실행하는 스레드를 사용다시피
이것은 IntentService가 아닙니다. IntentServices는 IntentService에서 확장됩니다. 이것은 일반적인 서비스이며 UI 스레드에서 작업을 수행합니다. –
이것은'IntentService'로 바뀌었던'Service'입니다. 차이점은 코드 단편에 설명되어 있습니다. 그것은 문자 그대로입니다. –