2016-12-15 12 views
20

bước: 1) Mở ứng dụng android (được xây dựng với cordova)Android cập nhật ứng dụng bắt đầu với cordova-webintent và buộc dừng

2) Sau đó, tôi gọi cordova-webintent để cài đặt bản cập nhật https://github.com/Initsogar/cordova-webintent

3) Tôi nhấn Cài đặt và nó bắt đầu cài đặt, nhưng sau một vài giây, ứng dụng sẽ dừng và đóng thay vì cài đặt và mở ứng dụng được cập nhật.

Sự cố này đã xuất hiện một thời gian trước và tôi không thể hiểu tại sao điều này xảy ra, bởi vì cùng một phiên bản cordova-webintentcordova.

4) Sau khi dừng ứng dụng, tôi nhấn vào biểu tượng ứng dụng, nhưng có một thông báo rằng "Ứng dụng chưa được cài đặt". Ứng dụng tiếp tục cài đặt trong nền sau một vài giây. Tôi chạm lại vào biểu tượng ứng dụng và ứng dụng đã cập nhật mở ra.

Xin vui lòng, giúp khắc phục vấn đề này với dừng ứng dụng trong khi cài đặt.

Logs:

E: \ work \ hello1> adb logcat ActivityManager: Tôi com.example.hello1: D *: S

--------- đầu của hệ thống

I/ActivityManager (715): [Bối cảnh Dịch vụ ưu tiên Adjustment] Set callerFg như sai cho service.getFlags(): 260

I/ActivityManager (715): START u0 {hành động = android.intent .action.VIEW dat = file: ///storage/emulated/0/filename1.apk typ = application/vnd.android.package-archive cmp = com.android.packageinstaller/.PackageInstallerActivity} từ uid 10657 hiển thị 0

--------- bắt đầu chính

I/ActivityManager (715): START u0 {dat = file: ///storage/emulated/0/filename1.apk cmp = com.android. packageinstaller/.InstallAppProgress (có tính năng bổ sung)} từ uid 10072 trưng bày 0 I/ActivityManager (715): [AppLaunch] Displayed Displayed com.android.packageinstaller/.InstallAppProgress: + 135ms

I/ActivityManager (715): Buộc dừng com.example.hello1 appid = 10657 người dùng = -1: gỡ cài đặt pkg

I/ActivityManager (715): Giết chết 19.149: com.example.hello1/u0a657 (adj 1): dừng com.example.hello1

W/ActivityManager (715): Thông báo chuyển đổi ứng dụng bỏ PACKAGENAME = com .example.hello1 I/ActivityManager (715): lực lượng khi kết thúc hoạt động ActivityRecord {16a2ad7e u0 com.example.hello1/.MainActivity t2758}

I/ActivityManager (715): lực lượng khi kết thúc hoạt động ActivityRecord {32eb6933 u0 com.android .packageinstaller/.InstallAppProgress t2758}

W/ActivityManager (71 5): Cái chết giả mạo cho ProcessRecord {2590ad4d 19149: com.example.hello1/u0a657}, curProc cho 19149: null

I/ActivityManager (715): Buộc dừng com.example.hello1 APPID = 10.657 user = -1: update pkg I/ActivityManager (715): Buộc dừng com.example.hello1 APPID = 10.657 user = 0: pkg loại bỏ

+0

Bạn có thể cung cấp thêm một số thông tin về phiên bản này như Android, phiên bản cordova và thiết bị có cụ thể không? Cũng bởi bất kỳ cơ hội bạn ứng dụng đi vào nền trong quá trình cập nhật? Xin vui lòng ném một số ánh sáng về điều này để đào sâu hơn – Gandhi

+0

- Android 5.0.1 - Cordova 6.3.1 - Tôi đã kiểm tra trên máy tính bảng Lenovo và Samsung. - Có, ứng dụng tắt và chuyển sang chế độ nền trong khi cập nhật – IuliiaBoiko

+0

Vì ứng dụng chạy nền, tôi nghi ngờ rằng sự kiện có thể không được kích hoạt như đã đề cập trong các vấn đề về plugin dành cho web - https://github.com/Initsogar/cordova-webintent/issues/27 https://github.com/Initsogar/cordova-webintent/pull/28 Vui lòng kiểm tra các liên kết và cho tôi biết nếu nó giúp – Gandhi

Trả lời

0

Khi bạn đang bắt đầu quá trình cài đặt ý định/hoạt động, hệ điều hành Android sẽ tắt ứng dụng đang chạy của bạn, sau đó dọn dẹp các tệp ứng dụng cũ (về cơ bản nó sẽ loại bỏ chúng - ngoại trừ thư mục dữ liệu nội bộ ứng dụng/sandbox) và sau đó sao chép các tệp ứng dụng mới và chỉ sau đó bạn có thể khởi động ứng dụng

Việc tắt ứng dụng là cần thiết trong quá trình cài đặt trong khi ứng dụng đang chạy, ứng dụng có thể giữ khóa tệp có thể dẫn đến việc xóa các tệp cũ

Hộp thoại "cưỡng bức dừng" là hành vi tiêu chuẩn của Android về các tín hiệu thoát khỏi quá trình không thành công. Bạn có thể ghi đè lên toàn bộ cơ chế "buộc dừng" bằng cách sử dụng 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 
} 

tôi không khuyên bạn sử dụng các mẹo trên để giải quyết vấn đề của bạn - đó là mục đích duy nhất là để giới thiệu nó cho bạn để hiểu cách thức hoạt động và cuối cùng giúp bạn khắc phục sự cố hơn nữa trên

để đạt được một nâng cấp tự ứng dụng liền mạch, bạn sẽ phải:

  1. Tải aPK mới (nó phải có chữ ký của các giấy chứng nhận tương tự như ứng dụng hiện tại của bạn trên điện thoại)
  2. Thiết lập mục đích/hoạt động cài đặt bị trì hoãn using PendingIntent với thời gian trễ mà ứng dụng của bạn cần tắt + một số thời gian đệm tùy thuộc vào hiệu suất thiết bị (ví dụ: 500ms-1sec là hợp lý)
  3. Thoát khỏi hiện tại đang chạy ứng dụng System.exit(0)
Các vấn đề liên quan