Android -AppWidgets, AlarmManager 및 Asynctask
-
16-09-2019 - |
문제
나는 앱 위젯을 업데이트하는 데 많은 운이 없습니다. AlarmManager
생성 된 방송. 내가하는 일은 다음과 같습니다.
초기화 AlarmManager
~에 AppWidgetProvider#onEnabled
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60000, pendingIntent);
나는 또한 AlarmManager
. 업데이트가 시작되면 코드가 실행됩니다 AsyncTask
그것은 네트워크 호출을 만듭니다. 때 AsyncTask
완성 됐습니다 (onPostExecute
) 이전에 얻은 인스턴스를 사용합니다 AppWidgetManager
위젯을 업데이트하려면 그것은 모두 로그에서 메시지를 볼 때까지 실제로 잘 작동합니다. "Process com.foo.myapp (pid 12345) has died"
그 후 AlarmManager
다른 업데이트를 시작하지 마십시오.
알람을 다시 시작할 어떤 종류의 점검이 필요합니까? 예를 들어 사용자가 위젯의 상위 앱에 액세스 할 때? 요청의 중간에 내 앱이 사망하면 장기 실행 작업을 완료하고 위젯으로 돌아올 수 있도록하려면 어떻게해야합니까?
해결책
업데이트가 시작되면 코드가 실행됩니다.
이것이 내부에 있다면 BroadcastReceiver
, 그것은 작동하지 않습니다. 당신은 a에서 나사산을 안전하게 포크 할 수 없습니다 BroadcastReceiver
, 그리고 AsyncTask
효과적으로 스레드를 포크하여 작업을 비동기 적으로 수행합니다.
대신, 당신은 장기 실행 작업을 a에 위임해야합니다 서비스는 경보에서 시작되었습니다 BroadcastReceiver
.