Mam wspólne menu na mojej aplikacji z ikonami. Kliknięcie ikony spowoduje rozpoczęcie działania. Czy istnieje sposób sprawdzenia, czy działanie już działa i uniemożliwienie jego uruchomienia wiele razy (lub z wielu wpisów)? Czy mogę przenieść aktywność z stanem onPause na pierwszy plan?Zapobieganie otwieraniu aktywności wiele razy
Odpowiedz
Użyj tego:
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
podczas uruchamiania Activity
.
od documentation:
Jeśli ustawione w intencyjny przekazany do Context.startActivity(), ta flaga będzie spowodować rozpoczęła działalność na pociągnięcie go do przodu Jego zadaniem jest historii stosie, jeśli jest już bieganie.
W swoim zgłoszeniu działalności w pliku manifestu, dodać tag android:launchMode="singleInstance"
Z dokumentacji startActivityForResult, jeśli uruchamiane działanie korzysta z trybu uruchamiania pojedynczego zadania, nie uruchomi się ono w zadaniu, co spowoduje natychmiastowe anulowanie wyniku. –
Mam wiele punktów wejściowych i działa to dla mnie bardzo dobrze –
w rzeczywistości nie jestem wielkim fanem "singleInstance", ponieważ powoduje, że aktywność jest uruchamiana w osobnym oknie, tak jakby była to osobna aplikacja, która bardzo źle doświadczenie użytkownika, gdy użytkownik otwiera widok aplikacji. –
utworzyć instancję swojej działalności, który nie chce się uruchomić wiele razy jak
Class ExampleA extends Activity {
public static Activity classAinstance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
classAinstance = this;
}
}
Teraz gdziekolwiek u chcą Sprawdzanie krzyżowe mam na myśli uniemożliwić jego wielokrotne uruchamianie, sprawdź to:
if(ExampleA.classAinstance == null) {
"Then only start your activity"
}
Pamiętaj, że to zapobiegnie gromadzeniu śmieci w działaniu. Ponadto nie pomoże to, jeśli działanie zostanie uruchomione z innego komponentu (np. Innej aplikacji), który nie może uzyskać dostępu do statycznego odnośnika aktywności (lub nawet o nim nie wie). – lxgr
Dodaj to do definicji Activity
w Androidmanifest.xml
...
android:launchMode = "singleInstance"
Wystarczy użyć
Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
dodaj
@Override
protected void onDestroy() {
super.onDestroy();
finish();
}
lub
launchmode do singleTask/jednomodowych
lub
zawsze otworzyć nową działalność poprzez wyczyszczenie stosu
Proszę dodać wyjaśnienie do swojej odpowiedzi. – ItamarG3
** Z kolejki recenzji: ** Mogę poprosić o dodanie nieco kontekstu wokół swojej odpowiedzi. Odpowiedzi dotyczące tylko kodu są trudne do zrozumienia. Pomoże to pytającemu i przyszłym czytelnikom, jeśli dodasz więcej informacji do swojego postu. –
mam go doskonale działa w następujący sposób. W działalności rozmówcy lub usługę (nawet z innej aplikacji)
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(APP_PACKAGE_NAME);
//the previous line can be replaced by the normal Intent that has the activity name Intent launchIntent = new Intent(ActivityA.this, ActivityB.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
oraz w manifeście aktywności odbiornika (I chcą zapobiec otwarciu dwukrotnie)
<activity android:name=".MainActivity"
android:launchMode="singleTask"
>
- 1. Zapobieganie otwieraniu bufora drzewa NERD przy uruchamianiu
- 2. Zapobieganie temu samemu okienku podrzędnemu wiele razy w formularzu MDI
- 3. Zapobieganie otwieraniu okna iCloud w uruchamianiu aplikacji OSX 10.8
- 4. Zapobieganie ponownemu ładowaniu aktywności po kliknięciu SearchView
- 5. Deklarowanie zmiennych wiele razy
- 6. NSNotificationCenter dzwoni wiele razy
- 7. StateChangeStart wyzwalanie wiele razy
- 8. Moq'ing podnoszenie zdarzeń wiele razy
- 9. Uruchamianie testowania PHPUnit wiele razy
- 10. NSNotification jest wywoływany wiele razy
- 11. chrome.tabs.onUpdated.addListener() o nazwie wiele razy
- 12. Chrome wysyła żądanie wiele razy.
- 13. NSURLProtocol canInitWithRequest: wywoływana wiele razy
- 14. Zapisz wiele razy w Cakephp
- 15. Powracasz wiele razy z metody?
- 16. Turbolinks ładuje Javascript wiele razy
- 17. CNContactStoreDidChangeNotification jest uruchamiany wiele razy
- 18. Użyj jednego CTE wiele razy
- 19. Detektor stanu zadzwonił wiele razy
- 20. Zapobieganie wielokrotnym instancjom formularzy
- 21. Zapobieganie odświeżaniu aktywności przy zmianie orientacji fragmentu androida
- 22. Wiele powiadomień o tej samej aktywności
- 23. Zapobieganie zdublowaniu formularzy podrzędnych MDI
- 24. Zmiana zawartości Spinner przy otwieraniu
- 25. Niestandardowy filtr sprężynowy o nazwie wiele razy
- 26. Jak utworzyć instancję Singleton wiele razy?
- 27. Kotuj plik Wiele razy bez pętli
- 28. Drukowanie tekstu wiele razy w Brainfuck
- 29. Użyj jednego fragmentu w ViewPager wiele razy
- 30. Django adnotate() wiele razy powoduje błędne odpowiedzi
nie robiłem rozwój Androida od jakiegoś czasu, ale jestem prawie pewny, że Android uruchomi istniejącą instancję twojego "Aktywności", zamiast uruchamiać nową. –