기타 동작은 잘 되고 있는 것 같은데 configure activity 에서 정상적으로 setResult(RESULT_OK, resultValue)를 시키지 않고
Back Key (device key)가 입력되면, 해당 날씨 위젯은 홈 스크린에 추가가 되지 않지만, Log cat 결과는 계속해서
onUpdate()가 들어옵니다. 현재 안드로이드 버전은 1.5입니다.
혹시 appwidget에 APPWIDGET_CONFIGURE를 추가하여 configure 액티비티를 사용할 경우 back key를 회피할수 있는 방법이나
위의 현상을 해결할 수 있는 법은 없을까요?
고수님들의 조언을 부탁드립니다. ㅠㅠ
간지로이드님 답변 주셔서감사드립니다.
우선 configure activity가 onCreate() 되기 전에 이미 provider의 onUpdate()가 치고 들어오면서 appWidgetIds의
인스턴스가 증가해 버렸습니다.
configure activity가 정상적으로 setResult(RESULT_OK, resultValue)가 되지 않고, setResult(RESULT_CANCELED); 일 경우
증가된 appWidgetIds를 삭제 시켜 줘야 할텐데 방법을 몰라 고민중입니다 ㅠㅠ
기대하는 이벤트 동작은
provider : onUpdate() --> configure activity onCreate() --> back Key --> provider : onDelete() --> provider : onDisable()
혹은
configure actvity onCreate() --> back Key --> appwidget 추가 되지 않음
처럼 동작되는 것입니다.
지금 문제점은 configure activity가 onCreate()되기 전에 이미 provider의 onUpdate()를 통해 widget 인스턴스가 생성이 되어 있는 상황에서 back key를 누르면 widget이 홈스크린에등록은 되지 않으면서 인스턴스가 남아 있기 때문에 계속해서 onUpdate()가 들어오는 것입니다.
또한 별개의 문제로 widget을 여러개 등록하고 난후 예를 들어 3개를 등록후 2개를 휴지통에버렸는데도 불구 하고 내부적으로 onUpdate()가 3개 그대로 들어오고 있습니다. 분명 onRecive()를 통해 delete 이벤트가 온것을 확인했는데도 말이죠.
이때 남아있는 한개의 widget을 휴지통에 버리면 정상적으로 onDisable()이 들어오고 더이상의 onUpdate()는 발생하지 않습니다.
버전이 1.5인데 내부적인 문제가 있는것인지 마음대로 잘 안되네요 ㅠㅠ
그래도 간지로이드님 관심에 기분은 좋습니다. 고맙습니다 ㅠㅠ
onUpdate를 시키지 않으면 되지 않을까요?? 너무 추상적인 대답이네요 ^^;;