/ / изпращане на предавания от asynctasks - android, android-asynctask

изпращане на предавания от asynctasks - android, android-asynctask

Имам асинктак, който прави нещо, когато свърши, искам да излъчва това, което е направено.

обикновено щях да направя: context.sendBroadcast(new Intent(MYINTENT)); но asynctask няма контекст. Видях няколко отговора на тези въпроси, които предполагаха да се препратят към контекста на дейността на ап на асинктака. но тази референция е лоша, ако потребителят върти екрана. и ръчно поддържане на справката е лошо решение (изисква твърде много от дейността, която създава asynctask, която не контролирам). сега въпросите са:

1) Защо Android е създаден по този начин? защо дори имам нужда от контекст за изпращане на излъчване, когато излъчванията могат да бъдат регистрирани и обработвани от други контексти?

2) има ли добро решение на този проблем? (добро = изисква колкото се може по-малко от дейността за създаване на асинктака, оцелява ротации и др.).

Отговори:

16 за отговор № 1

Контекстът, който използвате в AsyncTaskв момента е контекстът на текущата Ви дейност. По подразбиране завъртането на екрана ще унищожи текущия пример за тази дейност и ще създаде нова. Това е (дори и да не изглежда отначало) планирано поведение. Причината за това е, че може да искате да имате различни ресурси (оформления, чертежи и т.н.) за различни ориентации на екрана. За да приложи тези потенциално различни ресурси, Android ще пресъздаде активността при всяка ротация.

Можете да противодействате на това, като зададете android:configChanges атрибут във вашия AndroidManifest.xml но в този случай това решение не се препоръчва.

Правилният начин за справяне с този проблем е да премине контекста на приложението към AsyncTask вместо вашата дейност (Activity наследява от Context). Можете да направите това, като се обадите getApplicationContext() от примера на Вашата дейност. Контекстът ви на приложения ще продължи да се задейства, като например завъртане на екрана и ще продължи да живее, докато системата не убие приложението.

Що се отнася до причината, поради която имате нужда от контекст, за да извършвате основни задачи:

Интерфейс за глобална информация засреда на приложение. Това е абстрактен клас, чието изпълнение е осигурено от Android система. Тя позволява достъп до специфични за приложението ресурси и класове, както и повиквания за операции на ниво приложение, като например стартиране на дейности, излъчване и получаване на намерения и др.

По този начин официалната документация дефинира а Context, Може би някой може да обясни това по-добре, но за мен това определение е достатъчно.