2016-12-15 4 views
20

шагов: 1) Открылись приложение для Android (встроенного с cordova)обновления Android запуска приложения с Cordova-webintent и силой остановить

2) Тогда я назвал cordova-webintent для установки обновлений https://github.com/Initsogar/cordova-webintent

3) Я нажал «Установить», и он начнет установку, но через несколько секунд приложение перестанет останавливаться и закрывается вместо установки и открытия обновленного приложения.

Эта проблема появилась некоторое время назад, и я не могу понять, почему это произошло из-за той же версии cordova-webintent и cordova.

4) После остановки приложения коснитесь значка приложения, но есть сообщение о том, что «Приложение не установлено». Через несколько секунд приложение продолжит установку в фоновом режиме. Я снова коснусь значка приложения и откроется обновленное приложение.

Пожалуйста, помогите устранить эту проблему при остановке приложения при установке.

Журналы:

E: \ работа \ hello1> ADB LogCat ActivityManager: Я com.example.hello1: D *: S

--------- начало системы

I/ActivityManager (715): [Справочная служба Приоритет Настройка] Набор callerFg как ложь для service.getFlags(): 260

I/ActivityManager (715): START u0 {действовать = android.intent .action.VIEW dat = file: ///storage/emulated/0/filename1.apk typ = application/vnd.android.package-archive cmp = com.android.packageinstaller/.PackageInstallerActivity} из uid 10657 на дисплее 0

--------- начало основного

I/ActivityManager (715): START u0 {Дат = файл: ///storage/emulated/0/filename1.apk CMP = com.android. packageinstaller/.InstallAppProgress (имеет дополнительные услуги)} из UID 10072 на дисплее 0 I/ActivityManager (715): [AppLaunch] Отображаемое Показано com.android.packageinstaller/.InstallAppProgress + 135ms

I/ActivityManager (715): Force stopping com.example.hello1 appid = 10657 user = -1: удалить pkg

I/ActivityManager (715): Убийство 19149: com.example.hello1/u0a657 (прил 1): остановка com.example.hello1

W/ActivityManager (715): Сообщать приложение переключатель бросить PACKAGENAME = ком .example.hello1 I/ActivityManager (715): Force окончания действия ActivityRecord {16a2ad7e u0 com.example.hello1/.MainActivity t2758}

I/ActivityManager (715): Force окончания действия ActivityRecord {32eb6933 u0 com.android .packageinstaller/.InstallAppProgress t2758}

W/ActivityManager (71 5): ложная смерть для ProcessRecord {2590ad4d 19149: com.example.hello1/u0a657}, curProc для 19149: null

I/ActivityManager (715): Force stopping com.example.hello1 AppID = 10657 пользователь = -1: обновление упак I/ActivityManager (715): Принудительная остановка com.example.hello1 AppID = 10657 пользователь = 0: упак удалены

+0

Не могли бы вы предоставить дополнительную информацию об этом, например, версию для Android, версию cordova и конкретную ли она? Также, если вы случайно обратились к фону во время обновления? Пожалуйста, проливайте свет на это, чтобы копать глубже – Gandhi

+0

- Android 5.0.1 - Cordova 6.3.1 - Я проверил на планшетах Lenovo и Samsung. - Да, приложение отключается и переходит на задний план при обновлении – IuliiaBoiko

+0

Поскольку приложение переходит на задний план, я подозреваю, что событие намерения может не срабатывать, как упоминалось в проблемах плагина веб-намерения - https://github.com/Initsogar/cordova-webintent/issues/27 https://github.com/Initsogar/cordova-webintent/pull/28 Пожалуйста, проверьте ссылки и дайте мне знать, если это поможет – Gandhi

ответ

0

Когда вы начинаете устанавливать умысел/operation, ОС Android принудительно отключает ваше приложение, а затем очищает старые файлы приложений (в основном это удаляет их, за исключением внутренней папки данных/песочницы приложений), а затем копирует новые файлы приложений и только после этого вы можете запустить приложение.

Отключение приложения необходимо в процессе установки, так как во время работы приложения он может содержать блокировки файлов, которые могут привести к сбоям в удалении старых файлов.

Диалоговое окно «Силовая остановка» - это стандартное поведение андроида при безуспешных процессах выхода из системы. Вы можете переопределить весь механизм «силы стоп» с помощью 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 
} 

Я не рекомендую использовать вышеупомянутую уловку, чтобы решить вашу проблему - это единственная цель для демонстрации его для вас, чтобы понять, как это работает, и в конце концов помогает устранить далее

для достижения полноценного обновления самостоятельного приложения, вы должны будете:

  1. Загрузить новый APK (он должен быть подписан тем же сертификатом, как существующее приложение на телефон)
  2. Устанавливайте намерение/операцию установки с задержкой установки using PendingIntent с задержкой на то, сколько времени ваше приложение должно закрыть + некоторое время буферизации в зависимости от производительности устройства (например, 500 мс-1сек разумно)
  3. Выход из текущего состояния приложение System.exit(0)

 Смежные вопросы

  • Нет связанных вопросов^_^