Приложение Android начинает обновление с помощью cordova-webintent и принудительно останавливается

Шаги:

  1. Открыл приложение android (построено с cordova)

  2. Затем я позвонил cordova-webintent и попросил установить обновления.

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

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

  1. После того, как принудительная установка приложения была остановлена, я нажал на значок приложения, но появляется сообщение о том, что приложение не установлено. Приложение продолжит установку в фоновом режиме через несколько секунд. Я снова нажал на значок приложения, и обновленное приложение открылось.

Почему приложение принудительно останавливается при установке?

Журналы:

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

--------- beginning of system

I/ActivityManager(  715): [Background Service Priority Adjustment] Set callerFg as false for 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} from uid 10657 on display 0

--------- beginning of main

I/ActivityManager(  715): START u0 {dat=file:///storage/emulated/0/filename1.apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras)} from uid 10072 on display 0
I/ActivityManager(  715): [AppLaunch] Displayed Displayed com.android.packageinstaller/.InstallAppProgress: +135ms

I/ActivityManager(  715): Force stopping com.example.hello1 appid=10657 user=-1: uninstall pkg

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

W/ActivityManager(  715): notify app switch quit packageName=com.example.hello1
I/ActivityManager(  715):   Force finishing activity ActivityRecord{16a2ad7e u0 com.example.hello1/.MainActivity t2758}

I/ActivityManager(  715):   Force finishing activity ActivityRecord{32eb6933 u0 com.android.packageinstaller/.InstallAppProgress t2758}

**W/ActivityManager(  715): Spurious death for ProcessRecord{2590ad4d 19149:com.example.hello1/u0a657}, curProc for 19149: null**

I/ActivityManager(  715): Force stopping com.example.hello1 appid=10657 user=-1: update pkg
I/ActivityManager(  715): Force stopping com.example.hello1 appid=10657 user=0: pkg removed

person IuliiaBoiko    schedule 15.12.2016    source источник
comment
Не могли бы вы предоставить дополнительную информацию об этом, например о версии Android, версии Cordova, и зависит ли это от устройства? Также случайно ваше приложение уходит в фоновый режим во время обновления? Пожалуйста, пролейте свет на это, чтобы копнуть глубже   -  person Gandhi    schedule 19.12.2016
comment
- Android 5.0.1 - Cordova 6.3.1 - Проверял на планшетах Леново и Самсунг. - Да, приложение закрывается и переходит в фоновый режим при обновлении   -  person IuliiaBoiko    schedule 19.12.2016
comment
Поскольку приложение переходит в фоновый режим, я подозреваю, что событие намерения может не срабатывать, как указано в проблемах с плагином веб-намерений - github.com/Initsogar/cordova-webintent/issues/27 github.com/Initsogar/cordova-webintent/pull/28 Пожалуйста, проверьте ссылки и дайте мне знать, поможет ли это   -  person Gandhi    schedule 20.12.2016
comment
@ user3441891 Если вы можете опубликовать журнал ошибок, это очень поможет. Но согласно доступной информации, я думаю, вам нужно вызвать эту операцию обновления в отдельном потоке (что-то похожее на задачу async), возможно, она работает в основном потоке и вызывает эту проблему.   -  person Akram    schedule 21.12.2016
comment
@ raina77ow Есть ли какие-либо ошибки в консоли устройства во время принудительной остановки?   -  person Gandhi    schedule 23.12.2016
comment
@ raina77ow Да, я обнаружил эту ошибку в ActivityManager (602): ложная смерть для ProcessRecord {2ed1f0f5 27636: com.example.test / u0a183}, curProc для 27636: null   -  person IuliiaBoiko    schedule 06.01.2017
comment
Возможный дубликат Что такое ложная смерть в Android?   -  person Martin Zeitler    schedule 04.01.2019


Ответы (1)


У меня есть две возможные причины для решения вашей проблемы:

  • Проблема, связанная с потоками, зависит от типа процессоров мобильного телефона или планшета (сколько потоков может выполняться одновременно), имейте в виду, что cordoba-webintent - это вызов на основе асинхронного режима.
  • В обеих версиях (cordoba-webintent и cordoba) могут отсутствовать общие плагины. (Плагины должны были быть там, но не встроены!)

В первом сценарии сначала проверьте свой манифест:

<intent-filter>
     <action android:name="com.example.yourapplication.hello1" />
     <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Однозначно у него должно быть уникальное имя. Затем проверьте свой Java-код в том месте, где вы вызываете webintent.

startActivity({action: 'com.example.yourapplication.hello1'}) 

Здесь будет удобно использовать try{}, чтобы проверить, срабатывает ли веб-намерение до или после MainActivity() вашего приложения. Также проверьте порядок огня намерения, если ваши аргументы MainActivity () (has extras).

Второй сценарий:

  • загрузите cordoba-webintent с gitHub
  • создай свой apk
  • извлеките его и найдите каталог плагина
  • включите этот каталог плагинов в свой проект
  • Таким образом будет обеспечено, что webintent установлен с последним обновлением и что во время автоматического обновления, которое вы запускали ранее, ничего не произошло.

Я надеюсь указать другой подход к вашему делу!

person George Gotsidis    schedule 31.12.2020