2013-03-21 10 views
5

Używam usługi AIDL w mojej aplikacji. Chcę również uruchomić inny proces, więc używam android:process=":remote" w deklaracji usługi w manifeście.używając android: process = ": remote" odtwarza obiekt aplikacji Android

Mój problem polega na tym, że gdy rozpoczyna się proces :remote, najwyraźniej odtwarza obiekt Application.

Naprawdę nie rozumiem tego, ponieważ nadpisuję obiekt aplikacji i wywołuje wiele rzeczy klienta w metodzie onCreate(). Jednak chcę, aby kod usługi był umieszczony w tym samym pakiecie APK z klientem.

Czy mogę to osiągnąć? Czy obiekt Application jest ponownie tworzony po rozpoczęciu nowego procesu?

Doceń swoją pomoc. Dzięki!

Odpowiedz

4

również chcę, aby go uruchomić inny proces

Dlaczego? Jaką wartość zwiększa to użytkownik, aby zrekompensować dodatkowe koszty pamięci RAM, procesora i baterii? Bardzo niewiele aplikacji wymaga więcej niż jednego procesu.

Moim problemem jest to, że gdy „remote” rozpoczyna proces najwyraźniej odtwarza obiekt Application

Oczywiście. Każdy proces otrzymuje swój własny.

ja naprawdę nie zrobić z tym jak zastąpić obiekt aplikacji i nazwać wiele rzeczy klienta w „onCreate()” metoda

Następnie pozbyć android:process=":remote". Twoi użytkownicy będą Ci wdzięczni.

Jednak chcę, aby kod usługi był umieszczony w tym samym pakiecie APK z klientem.

Jaka usługa?

Czy obiekt aplikacji jest zawsze odtwarzany po rozpoczęciu nowego procesu?

Tak.

+0

to dlaczego dla każdego komponentu można ustawić właściwość android: process = ": remote"? Chodzi mi o to, czy nie można uruchamiać komponentów w różnych procesach? Tak naprawdę potrzebuję tej elastyczności w przypadku awarii usługi zdalnej, aby nie zawieść mojego klienta. –

+1

@ user1986565: "Tak naprawdę potrzebuję tej elastyczności w przypadku, gdy zdalna usługa ulegnie awarii, więc nie zawiedzie też mojego klienta" - utalentowani programiści używają innych technik, takich jak niezamknięte procedury obsługi wyjątków, aby rozwiązać ten problem, zamiast marnować procesory swoich użytkowników , Pamięć RAM i bateria. – CommonsWare

+0

czy zdalna usługa marnuje więcej pamięci RAM procesora i baterii niż lokalna? Mam na myśli - wykonuje ten sam kod. Więc wykorzystanie procesora i baterii jest takie samo. Ma własną kupę, ale kupa rośnie, więc nie powinna być zbyt marnotrawstwem. Czy się mylę? –

1

Jak już wspomniano przez CommonsWare, każdy z procesów otrzymuje swój własny obiekt Application.

W swojej metodzie Application.onCreate() można sprawdzić, czy metoda jest wywoływana z poziomu głównego procesu lub z poziomu zdalnego procesu i odpowiednio inicjować różne elementy.

Powiązane problemy