2016-12-15 11 views
20

kroki: 1) otworzyło Android (zbudowany z cordova)Android aktualizacja aplikacji początek z Cordova-webintent i siłą zatrzymać

2) Następnie zadzwoniłem cordova-webintent za instalowaniem aktualizacji https://github.com/Initsogar/cordova-webintent

3) Nacisnąłem przycisk Instaluj, aby rozpocząć instalację, ale po kilku sekundach aplikacja wymusiła zatrzymanie i zamknięcie zamiast instalacji i otwarcia zaktualizowanej aplikacji.

Ten problem pojawił się jakiś czas temu i nie mogę zrozumieć, dlaczego tak się stało, z powodu tej samej wersji cordova-webintent i cordova.

4) Po zatrzymaniu aplikacji stukam ikonę aplikacji, ale pojawia się komunikat "Aplikacja nie jest zainstalowana". Aplikacja kontynuuje instalowanie w tle po kilku sekundach. Stukam ponownie w ikonę aplikacji i otwiera się zaktualizowana aplikacja.

Proszę, pomóż rozwiązać ten problem przy zatrzymaniu aplikacji podczas instalacji.

kłody:

E: \ praca \ hello1> adb logcat ActivityManager: I com.example.hello1: D * S

--------- początek systemu

I/ActivityManager (715): [Usługi Tło Korekta Priorytet] Zestaw callerFg jako false dla service.getFlags(): 260

I/ActivityManager (715): START u0 {act = android.intent .action.VIEW dat = file: ///storage/emulated/0/filename1.apk typ = application/vnd.android.package-archive cmp = com.android.packageinstaller/.PackageInstallerActivity} z uid 10657 na wyświetlaczu 0

--------- początek głównej

I/ActivityManager (715): START u0 {dat = file: ///storage/emulated/0/filename1.apk cmp = com.android. packageinstaller/.InstallAppProgress (posiada dodatki)} z uid 10072 na ekranie 0 I/ActivityManager (715): [AppLaunch ★] Wyświetlany com.android.packageinstaller/.InstallAppProgress: + 135ms

I/ActivityManager (715) Wymuś zatrzymanie com.example.hello1 appid = 10657 user = -1: uninstall pkg

I/ActivityManager (715) zabijanie 19149: com.example.hello1/u0a657 (adj 1): stop com.example.hello1

W/ActivityManager (715) notyfikacji przełącznik aplikacji wyjść packageName = pl .example.hello1 I/ActivityManager (715): Siła działania wykańczania ActivityRecord {16a2ad7e U0 com.example.hello1/.MainActivity t2758}

I/ActivityManager (715): Siła wykańczania aktywność ActivityRecord {32eb6933 U0 com.android .packageinstaller/.InstallAppProgress t2758}

W/ActivityManager (71 5): rzekoma śmierć dla ProcessRecord {2590ad4d 19149: com.example.hello1/u0a657}, curProc dla 19149: null

I/ActivityManager (715): Wymuszenie zatrzymania com.example.hello1 appid = 10657 user = -1: aktualizacja pkg I/ActivityManager (715): Siła zatrzymanie com.example.hello1 appid = 10657 user = 0: pkg usunięte

+0

Czy możesz podać więcej informacji na ten temat, takich jak wersja Androida, wersja cordova i czy jest to urządzenie specyficzne? Również przez przypadek aplikacja przechodzi do tła podczas aktualizacji? Proszę rzucić trochę światła na to, aby kopać głębiej – Gandhi

+0

- Android 5.0.1 - Cordova 6.3.1 - Sprawdziłem na tabletach Lenovo i Samsung. - Tak, aplikacja zamyka się i przechodzi w tło podczas aktualizacji – IuliiaBoiko

+0

Ponieważ aplikacja przechodzi w tło, podejrzewam, że zdarzenie intencji nie może być uruchamiane zgodnie z opisem w wtyczce intencji WWW - https://github.com/Initsogar/cordova-webintent/issues/27 https://github.com/Initsogar/cordova-webintent/pull/28 Sprawdź linki i daj mi znać, jeśli pomoże – Gandhi

Odpowiedz

0

Kiedy zaczynają zamiarem zainstalowania/operacja, system operacyjny Android zdecydowanie zamknie uruchomioną aplikację, a następnie czyści stare pliki aplikacji (w zasadzie usuwa je - z wyjątkiem wewnętrznego folderu danych/piaskownicy), a następnie kopiuje nowe pliki aplikacji i tylko po tym można uruchomić aplikację, aby wyłączyć aplikację w procesie instalacji, podczas gdy aplikacja jest uruchomiona, może przechowywać blokady plików, które mogą spowodować błędy w usuwaniu starych plików

Okno dialogowe "Wymuszenie zatrzymania" jest standardowym zachowaniem Androida w przypadku zakończonych niepowodzeniem procesów "kończenia połączeń". Można zastąpić całą „Stop siła” mechanizm za pomocą Thread.UncaughtExceptionHandler

public void uncaughtException(Thread t, Throwable e){ 
    e.printStackTrace() 
    System.exit(0);// exit the app normally, with 0 (OK) signal - will bypass the "force close" UI 
} 

Nie polecam przy użyciu powyższej sztuczki, aby rozwiązać swój problem - to jedynym celem jest dla wystawiających go, aby zrozumieć, jak to działa i ostatecznie pomaga rozwiązać dalej

W celu osiągnięcia bezproblemową self-app uaktualnienie, musisz:

  1. Pobierz nowy plik APK (musi być podpisane przez tego samego certyfikatu jako istniejącej aplikacji na telefon)
  2. Skonfiguruj opóźnioną intencję/działanie instalacji using PendingIntent z opóźnieniem o tyle czasu, że aplikacja musi się wyłączyć + czas buforowania w zależności od wydajności urządzenia (np. 500ms-1sec jest uzasadnione)
  3. Wyjdź z aktualnie uruchomionego aplikacja System.exit(0)
Powiązane problemy