Ще доведе ли intentService до паралелен проблем с дейността

Прочетох, че IntentService създава работна нишка за работата, която трябва да бъде свършена. Ако разбирам правилно, това означава, че работата ще бъде извършена в нишка, различна от UI нишката. Въпросът ми е

ако дейността ми се опитва да актуализира споделени предпочитания и този intentService също актуализира споделени предпочитания, това означава, че ще се сблъскам с проблем с паралелността. Правилно? Така че аз по-добре използвам услугата, за разлика от IntentService, тъй като тя работи в основната нишка на потребителския интерфейс

Моля, потвърдете дали разбирам правилно


person Snake    schedule 09.02.2015    source източник


Отговори (1)


Прочетох, че IntentService създава работна нишка за работата, която трябва да бъде свършена. Ако разбирам правилно, това означава, че работата ще бъде извършена в нишка, различна от UI нишката.

Правилно.

ако дейността ми се опитва да актуализира споделени предпочитания и този intentService също актуализира споделени предпочитания, това означава, че ще се сблъскам с проблем с паралелността. Правилно?

AFAIK, SharedPreferences е безопасен за нишки. Така че ще зависи малко от това какво актуализират тези два компонента. Ако те актуализират стойности под отделни ключове, AFAIK трябва да сте ОК. Ако обаче те може да променят стойности за едни и същи ключове, тогава може да имате проблеми (мръсни четения и какво ли още не).

Така че аз по-добре използвам услугата, за разлика от IntentService, тъй като тя работи в основната нишка на потребителския интерфейс

В Java обектите не "работят" в нишки. Методите се изпълняват върху нишки. Следователно услугата не се изпълнява "на основна нишка на потребителския интерфейс". Методите на жизнения цикъл за всички услуги (напр. onCreate(), onStartCommand()) се извикват в основната нишка на приложението. Това включва IntentService. IntentService случайно има вградена реализация на onStartCommand(), която насочва Intent към фонова нишка.

Освен това не правете I/O на диск в нишката на основното приложение, което включва запис в SharedPreferences.

Ако може да пишете на едни и същи ключове на SharedPreferences от множество нишки, използвайте техники за едновременно програмиране. Java нишките съществуват толкова дълго, колкото и Java, и има много написано за това как да правите правилно едновременно програмиране в Java.

person CommonsWare    schedule 09.02.2015
comment
Добре обяснено както винаги - person Marcus; 10.02.2015
comment
Наистина страхотно обяснение, както обикновено. Благодаря ти @CommonsWare - person Snake; 10.02.2015