2013-11-28 18 views
16

Tôi đang làm việc trên một số dự án Phonegap. Trong một số người trong số họ, tôi đang sử dụng các chức năng của máy ảnh.Camera phonegap android giết chết cordova

Tôi đang đánh đố với vấn đề này (từ các tài liệu PhoneGap):

Android Quirks

Android sử dụng các ý định đến khởi động các hoạt động camera trên thiết bị để hình ảnh chụp, và trên điện thoại với bộ nhớ thấp, hoạt động Cordova có thể bị giết. Trong trường hợp này, hình ảnh có thể không xuất hiện khi hoạt động cordova được khôi phục.

Tôi gặp sự cố này trên một trong các thiết bị thử nghiệm liên tục (HTC One X). Nó khá đầy đủ, rất tốt để kiểm tra điều này.

Tôi nhận thấy có một plugin thay thế: https://code.google.com/p/foreground-camera-plugin/ cho sự cố này. Nhưng tôi cố gắng tránh các plugin càng nhiều càng tốt ... (để được di động sang các nền tảng khác một cách dễ dàng). Và nó có sẵn với Phonegap 2.4.0 và tôi đang làm việc với Phonegap 2.9.0

Tôi đã sử dụng URI tệp chứ không phải dữ liệu (để tránh vấn đề bộ nhớ).

Câu hỏi của tôi là: không ai biết khi nào Android quyết định tiêu diệt các hoạt động khác (như Cordova, khá cần thiết cho Phonegap). Ở mức độ bộ nhớ miễn phí nào? (phần trăm, MB). Vì vậy, tôi có thể kiểm tra điều này trước và cảnh báo người dùng.

Tất nhiên tôi hy vọng vấn đề này được giải quyết ... nhưng nó dường như không được giải quyết sớm ....

Chỉnh sửa sau khi nhận xét đầu tiên

tôi đã không có ý định giải quyết vấn đề thực sự, tôi đã phát hiện ra điều đó không thực sự có thể. Đó là một điều giữa Android và Phonegap. Tôi chỉ cần biết liệu có thể cảnh báo người dùng điều này sẽ xảy ra hay không. Vì vậy, người dùng có thể giết một số ứng dụng khác trước khi tiếp tục ... Vậy khi nào điều này xảy ra? Khi nào android nghĩ rằng không có đủ bộ nhớ để có được điều này xảy ra? Đó là câu hỏi của tôi.

Sửa 2013 29 tháng 11

Do liên kết đưa ra bởi AustinAllover, bây giờ tôi biết điều này không chỉ là một vấn đề PhoneGap ... Chiếc máy ảnh Android dường như để giết tất cả các ứng dụng Java trong trường hợp quá ít bộ nhớ ... do đó, câu hỏi là chung chung hơn so với Phonegap/Cordova chỉ ...

+0

@AustinAllover: Tôi không nghĩ rằng tôi hiểu câu hỏi của bạn hoặc vấn đề của bạn. Ứng dụng cordova (phonegap) bị giết bởi android (vì vấn đề bộ nhớ) trong trường hợp này không có gọi lại. Sau khi hình ảnh được chụp, ứng dụng phonegap được khởi động lại từ đầu ... không có kiến ​​thức về bất cứ điều gì đã xảy ra trước đây .... –

+1

câu hỏi này có một số câu trả lời thú vị ... http://stackoverflow.com/questions/8368091/phonegap -camera-reboot-the-application – AustinAllover

+0

Cảm ơn, khá hữu ích .... mặc dù xếp hạng cao nhất đi tới plugin được đề cập trong câu hỏi của tôi (hỗ trợ cho đến khi phonegap 2.4.0) Tùy chọn này có thể hữu ích: nhưng chỉ khi thử nghiệm dưới dạng nhà phát triển: "Tùy chọn nhà phát triển" có tên "Không giữ hoạt động". –

Trả lời

1

Không chắc chắn nếu có câu trả lời đúng cho câu hỏi của bạn nhưng tôi sẽ cố gắng.

Nó phụ thuộc vào một vài yếu tố khi ứng dụng bị giết vào bộ nhớ trống. Yếu tố đầu tiên và chính là hoạt động của máy ảnh cần bao nhiêu. Ứng dụng máy ảnh chính nó là trên hầu hết các thiết bị (mặc dù nó thay đổi) khoảng 10MB. Đây là kích thước của ứng dụng trong bộ nhớ chứ không phải kích thước của ứng dụng khi chạy hoạt động, điều này sẽ lớn hơn một chút về mặt logic. Nó cũng phụ thuộc vào chính máy ảnh và lượng bộ nhớ cần thiết để lưu trữ ảnh thực tế, cho phép giả sử ảnh có dung lượng khoảng 4MB khi được lưu trữ và khoảng 20MB. Điều này mang lại cho chúng tôi giới hạn trên xấp xỉ là 30MB cho ứng dụng đang chạy, mặc dù là đầu cơ và sau này tôi sẽ tự kiểm tra và chỉnh sửa nó.

Một tài liệu tham khảo tốt về bộ nhớ liên quan đến Android, bạn có thể tìm thấy ở đây https://01.org/android-ia/user-guides/android-memory-tuning-android-5.0-and-5.1 Họ tư vấn cho luôn có 500MB hoặc thêm bộ nhớ có sẵn để chạy các ứng dụng, đây là tất nhiên cho tất cả các ứng dụng bạn đang chạy và không cho một ứng dụng cụ thể . Hơn điểm GC bắt đầu xóa ứng dụng khỏi bộ nhớ, điều này xảy ra rất gần với giới hạn thực tế của bộ nhớ, khi ít hơn 5% vẫn còn miễn phí, giá trị này là giả mạo bởi các thử nghiệm của riêng tôi. Đầu tiên nó giết chết các ứng dụng vẫn còn trong bộ nhớ cache nhưng không còn cần thiết, chỉ như cuối cùng nó giết chết các ứng dụng đang hoạt động là tốt.

Giả định của tôi là ứng dụng của bạn sẽ bị giết dưới 50MB bộ nhớ, mặc dù tôi phải nhấn mạnh rằng có nhiều giả định ở đây và không có cách nào nói chung cho bạn câu trả lời phù hợp cho từng thiết bị với từng loại camera và mỗi phiên bản Android.

Hy vọng nó sẽ giúp, đừng sợ nó.

+0

Cảm ơn câu trả lời của bạn. Giải pháp thực sự có thể phải đến từ các nhà phát triển Android ... nếu họ chỉ kiểm tra quá trình đã bắt đầu máy ảnh trước khi giết chết để ghi nhớ miễn phí .... Không làm việc trên dự án này ngay bây giờ, như bạn đã nêu, không thể đưa ra một câu trả lời thực sự. Nhưng bạn đưa ra một số dấu hiệu tốt về số lượng. –

1

Hãy thử tìm một plugin không khởi chạy ứng dụng máy ảnh hệ thống. Thay vào đó, hãy sử dụng hoạt động máy ảnh tùy chỉnh chỉ với các tính năng hạn chế để giảm mức sử dụng bộ nhớ.

Các vấn đề liên quan