2013-07-26 6 views

Odpowiedz

139

Do czego stosuje się powinowactwo zadań systemu Android?

Aplikacja dla Androida ma Działania, które tworzą stos, taki jak talia kart. Jeśli uruchomisz aplikację na Androida i zaczniesz pięć działań A, B, C, D, E. Utworzą stos. Ostatnia aktywność, która ma zostać uruchomiona i jest wyświetlana. Jeśli zamkniesz E, D pojawi się. Jeśli zamkniesz D, pojawi się C. itd.

Należy zauważyć, że Działania B i D są tą samą działalnością. Co się stanie, jeśli użytkownik wprowadzi pewne modyfikacje do D weather screen, a następnie zdecyduje się zamknąć działanie, a następnie zamknie się C Map view?

Następnie użytkownik powrócił na ekran pogodowy, a użytkownik byłby niezadowolony, ponieważ zmiany wprowadzone na poziomie D weather screen nie zostały zapisane na poziomie B weather screen. Chociaż jest to ta sama aktywność, jest to inny stan tej aktywności.

Użytkownik miał 5 warstw stosu działań, a dwa z nich były tą samą aktywnością. Zrzucenie wszystkich 5 ze stosu stworzy zjawisko, w którym będziesz interakcji z dwiema różnymi wersjami tego samego działania i może być dość mylące.

Użytkownicy zazwyczaj nie myślą w kategoriach sztywnego zestawu czynności. Myślą: "och, widok pogody zrobię tam zmianę", a następnie chcą wrócić do widoku mapy. Następnie wykonaj kopię zapasową, ponieważ chcą wrócić do ekranu logowania. Dlaczego pokazano B weather app i dlaczego nie zapisano ustawień z poziomu D?

Programista może być w stanie złagodzić pewne zamieszanie, jeśli Działania B i D zostały połączone w stanie. W ten sposób zmiana na jedną zmienia drugą. Za każdym razem, gdy użytkownik otwiera nowy ekran pogody, potajemnie otwiera pojedynczą instancję ekranu pogody.

W tych okolicznościach może być pożądane zmienienie poziomu czynności zadania. Użytkownik zmieniłby poziom D. Następnie cofnął się do poziomu B. I zobacz zmiany w B, które zostały wprowadzone do D.

Program utrzymuje stos, przez który można wykonać kopię zapasową, co jest miłe, a gdy użytkownik otwiera się X wystąpienia tej samej aktywności w przypadkowych miejscach, wszystkie są jednym.

slajdów z większą wyjaśnienia: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

+7

Jak o tym, czy skorzystać z 'singleInstance' zamiast używać 'taskAffinity'? – hguser

+0

SingleInstance ma wadę polegającą na tym, że działanie będące singlemInstance nie może mieć żadnej innej aktywności w stosie aktywności. z taskAffinity możesz skonfigurować, że jedno działanie uruchomi się w innym zadaniu, a drugie w bieżącym. – Malachiasz

+1

W niektórych przypadkach rozwiązaniem jest SingleInstance. specjalnie, jeśli chcesz się upewnić, że twoja aktywność jest jedyną czynnością w jej zadaniu i że jest to root * niezależnie od intencji, która go stworzyła. W ten sposób możesz ujawnić tę aktywność zewnętrznym programistom i aplikacjom bez utraty kontroli nad rekordem zadań działania. –