인텐트 서비스를 사용해야 하나요?
-
14-11-2019 - |
문제
사용자 로그인 화면이 있습니다.사용자가 로그인 버튼을 누르면 IntentService를 생성하여 나머지 서비스에 연결하고 인증 결과를 반환합니다.
이제 내가 달성하려는 기능은 다음과 같습니다.활동이 일시 중지된 경우(예:백그라운드로 이동) 인텐트 서비스는 계속 실행되어야 하며 실행됩니다.그러나 작업 관리자를 사용하여 애플리케이션을 종료하면 인텐트 서비스가 중지되어야 하지만 지금은 중지되지 않습니다.계속 실행됩니다 onHandleIntent
완료될 때까지.수동으로 전화하면 stopSelf()
, onDestroy()
호출되지만 onHandleIntent
메소드가 계속 실행됩니다.어떻게 강제로 onHandleIntent
그만하다?"return" 호출은 한 번의 나머지 메서드 호출로 처리될 수 있으므로 옵션이 아닙니다.
이 기능을 위해 인텐트 서비스를 사용해야 합니까, 아니면 다른 것(예: 서비스 또는 asynctask)을 사용해야 합니까?
해결책
먼저, 앱이 포그라운드에서 실행되는 동안 서비스가 원하는 작업을 수행하는 경우 서비스가 필요하지 않습니다.활동이나 대화는 작업을 수행하기 위해 스레드를 생성할 수 있으며, 이러한 스레드는 앱의 작업 범위 내에 있으므로 앱이 종료되면 종료됩니다.그렇지 않으면 항상 수행하려는 작업의 경우 사용자가 장치에서 무엇이든 할 수 있을 때 반드시 서비스를 사용하십시오.
왜 "반환 호출"이 옵션이 아닌지 잘 모르겠습니다.이는 조건을 확인하고 조건이 충족되면 루프나 블록을 종료한다는 뜻이라고 가정합니다.이것은 일반적으로 스레드(서비스 또는 다른 곳에서)가 종료되어야 하는 방식입니다(다른 방법도 있지만). 구혼).서비스 스레드는 발생한 특정 이벤트(예: 활동이 소멸된 경우, 활동이 종료될 때 파일이나 데이터베이스에 속성을 설정하여)를 수신할 수 있습니다. onDestroy
호출되지만 이것이 원하는 것이라면 아마도 서비스를 사용해서는 안 됩니다.) 그런 다음 run()
우아하게 돌아올 수 있어요.
그러나 이것이 사용자가 자신의 기기(앱 내부 또는 외부)에서 무엇을 하든 상관없이 수행하고 싶은 작업이라면 외부에서 방해받아서는 안 되는 작업이어야 합니다.끝날 때까지 계속되어야 합니다.
이 서비스를 언제 중지할지 더 잘 정의할 수 있다면 어떨까요?
다른 팁
onDestroy()
메소드에서 멈춤