2010-08-22 5 views
3

내 응용 프로그램 용 Android AppWidget을 개발 중입니다. 내 appwidget을 업데이트하려면 네트워크에서 데이터를 다운로드해야합니다. 하지만 onUpdate 메소드에서 그렇게하려고하면 내 appWidget이 Android 시스템에 의해 종료됩니다. 시간 소모적 인 작업을 수신기에서 수행 할 수 없다는 것을 알았으므로 onUpdate 메서드에서 서비스를 시작하고 그로부터 스레드를 시작했습니다. 그러나 여전히 문제는 지속됩니다. 누구나 Appwidget에서 네트워크 작업을 수행하는 방법을 알려 주실 수 있습니까?Android : 네트워크 작업 (Appwidget)

답변

3

다운로드 작업을 서비스에 위임하십시오 (예 : IntentService, 가능하면 WakefulIntentService). 작업 자체 중에 장치가 잠들 수있는 위험이 있는지 여부에 따라 달라질 수 있습니다.

AppWidgetProviderIntentServicestartService()을 부릅니다.

귀하의 IntentService'sonHandleIntent() 방법은 정적 getInstance() 방법을 통해 AppWidgetManager 자신을 받고, onUpdate() 당신이 현재 가지고있는 일을 할 것입니다. 그러나 onHandleIntent()이 백그라운드 스레드에서 실행되기 때문에 필요한만큼의 시간이 소요될 수 있습니다. IntentService은 모든 미해결 작업 요청이 완료되면 자동으로 종료됩니다.

+0

RemoteViewsService를 사용하여이를 결합하는 방법은 무엇입니까? 비동기 작업이 완료된 후 IntentService가 RemoteViewsService를 시작해야합니까? – Malachiasz

+0

@Malachiasz : "비동기 작업이 완료된 후 IntentService가 RemoteViewsService를 시작해야합니까?" -- 아니. RemoteViewsService는 앱 위젯 프레임 워크에서 자동으로 사용됩니다. IntentService가 'RemoteViewsService'가 가져와야하는 데이터베이스를 업데이트하는 것과 같이 IntentService가 변경 한 데이터를 RemoteViewsService가 인식하고 있는지 확인해야합니다. RemoteViewsService에서 뷰를 다시로드 할 앱 위젯을 얻는 방법이 있어야합니다. 그러나 이것을 조사하지는 않았으며 내 머리 꼭대기에서 어떻게 끝내는지 모릅니다. – CommonsWare