Hiệu suất kém trong Android khi chạy APK, chạy tốt trong trình duyệt


12

Tôi đã tạo một dự án trò chơi nhỏ trong HTML5 bằng công cụ Phaser (đã thử cả 1.1.5 và 1.1.6). Sau đó, để chuyển nó sang nền tảng di động, sử dụng Phonegap / Cordova cho Windows Phone 8, Android và iOS.

Trong trò chơi của tôi, có khoảng 10 yếu tố, hoạt hình (chuyển từ điểm a sang điểm b và một số vòng quay cùng một lúc). Trên iOS và Windows Phone 8, tôi không gặp phải bất kỳ vấn đề nào.

Nhưng với Android, hiệu suất là không thể chấp nhận được. Mặt khác, nếu tôi chạy trò chơi của mình thông qua trình duyệt thiết bị, nó sẽ chạy trơn tru mà không có bất kỳ độ trễ nào. Nhưng APK được biên dịch chạy rất giật và các phần tử di chuyển rất chậm và nhấp nháy.

Tôi đã kiểm tra cờ tăng tốc phần cứng Android được đặt thành "true" trong tệp kê khai. Đã thử thay đổi nó sai, nhưng điều đó không phản ánh bất kỳ thay đổi trong hiệu suất.

Tôi đã kiểm tra tương tự trên Android 4.2 trên thiết bị Samsung S2 và hiệu năng đó tốt hơn. Nhưng trên Asus Nexus Tab 7 (chạy Android 4.4), nó rất giật, trong khi cả hệ điều hành và thiết bị đều mới nhất. Cũng đã kiểm tra trên một thiết bị khác chạy Android 4.3 (Samsung Galaxy Grand Duos) và trên đó cũng có hiệu năng không tốt chút nào.

Trong trò chơi của tôi, tôi đã thử cả kết xuất WebGL / Canvas (Công cụ Phaser sử dụng Pixi.js, dự phòng thành canvas 2d nếu WebGL không được hỗ trợ), nhưng không thay đổi. Tương tự như vậy với Easeljs.

Nếu bất cứ ai khác phải đối mặt với vấn đề tương tự và có thể đề xuất bất kỳ cách nào để có được hiệu suất như bản địa. Tôi đã kiểm tra các ví dụ về cocoonjs và trong khi chúng có vẻ trơn tru và chấp nhận được, tôi không thể đi theo con đường đó.


3
Câu hỏi này được viết rất tốt. Tôi muốn biết nếu bạn chạy một điểm chuẩn hoặc hồ sơ để thu hẹp những gì có thể là thủ phạm và nếu bạn liên hệ với phonegap với một bộ các bước dễ dàng để tái tạo điều này?
AturSams

Tôi chưa viết thư cho phonegap. Đã thử hồ sơ và không thể tìm thấy bất cứ điều gì bất thường với khung hoặc cơ sở mã. Có lẽ đó là lý do tại sao mọi thứ chạy trơn tru trên máy tính để bàn cũng như trình duyệt di động. Một phát hiện là Android có thời gian chạy khác nhau cho các ứng dụng và trình duyệt dựa trên WebView. Nhưng không thể tìm thấy bất cứ điều gì chỉ ra rằng tại sao tweening nhỏ như vậy lại gây ra nhiều độ trễ trong chế độ APK (WebView). Trên thực tế, sự cố này đang xuất hiện trên tab Nexus chạy KitKat, được cho là có chế độ xem web nhanh nhất (dựa trên Chrome).
devilzk83

Đây là quan sát rất hời hợt về phía tôi; có vẻ như bạn có thể gặp lỗi Tôi không thấy lý do tại sao có sự khác biệt lớn về hiệu suất giữa các thiết bị cao cấp.
AturSams

1
Tôi tò mò tại sao bạn không muốn đi theo con đường CocoonJS. Tôi tin rằng cả Phaser và Pixi đều chạy tốt trong CocoonJS. Điều gì ngăn cản bạn thử tùy chọn đó?
Geoff

2
Lỗi gây ra kết xuất CSS3 & Canvas khập khiễng là webview dựa trên Chromium mới và đó là tổng số lỗi dành cho các nhà phát triển Cordova / Phonegap trên Android ... Ghaaadzoooks không có ai ở Google kiểm tra hiệu suất webview / CSS3 trước khi khởi động KitKat ? Tôi hy vọng nó được sửa nhanh và hy vọng đặc biệt rõ ràng cho mọi người trên điện thoại di động với các bản dựng Android bị khóa của bên thứ 3 ... Utter fiasco .. Nếu bạn là nhà phát triển Cordova / Phonegap hoặc sử dụng Webview, vui lòng gắn sao lỗi này với các báo cáo lỗi của Google Android .. . thông tin thêm: Groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Câu trả lời:


2

WebView dựa trên Chromium gây ra sự cố này cuối cùng đã được cập nhật trong phiên bản KitKat 4.4.3 / 4.4.4 vào giữa năm 2014, nhưng thật thoải mái khi xem xét một số nhà cung cấp đã đưa ra một số quyết định dường như tùy tiện về việc điện thoại của họ đã cập nhật và đã làm gì không phải. Chẳng hạn, Samsung Galaxy S4 vẫn bị kẹt ở 4.4.2.

Thực hiện theo lời khuyên được đưa ra bởi các câu trả lời khác: nếu bạn có trò chơi dựa trên khung vẽ thì hãy tránh PhoneGap trừ khi bạn có thể xác định rằng bị mắc kẹt với việc loại trừ điện thoại đang chạy phiên bản KitKat dưới 4.4.3 là chấp nhận được.


1

Cố gắng làm lại trò chơi của bạn trong libgdx. Libgdx đủ nhanh và không có vấn đề như vậy và nó hoạt động trên tất cả các nền tảng. Thật không may, đây chỉ là những gì tôi có thể nghĩ ra ngay bây giờ và tôi không thích ý tưởng chuyển đổi js sang java java hoặc bất cứ điều gì mà coverter làm. Mặc dù sẽ mất một chút thời gian, hãy thử nghiệm LibGDX.


1

Có vẻ như đây là một vấn đề với hầu hết các nhà phát triển trò chơi. Vấn đề tương tự

"Tôi thường nghe nói rằng phonegap không phải là lựa chọn tốt nhất khi muốn tạo trò chơi canvas. Nó thích nghi hơn với ứng dụng web cho người bản xứ."

Nó dường như được kết xuất khả năng vấn đề cho điện thoại Android. Có một số công cụ không thể xử lý kết xuất nhiều họa tiết hơn. Tôi biết 10 đối tượng rất dễ kết xuất nhưng nó chắc chắn có vấn đề với khả năng kết xuất.

Đề nghị của tôi là bạn đi với cocoonjs .


1

Tôi gặp vấn đề tương tự với Phaser (với trò chơi đơn giản này ). Thật không may, với kết xuất HTML5 và web / canvas, bạn sẽ cảm thấy thoải mái với điện thoại của mình - sẽ có những người dùng có trình duyệt bị hỏng hoặc hoạt động kém (như của tôi).

Giống như @ Captainbuzz123 đề xuất, giải pháp thực sự duy nhất là chuyển sang nền tảng không phải là HTML5. Công cụ lựa chọn của tôi bây giờ là OpenFL .

Trong khi ứng dụng Phaser (rất đơn giản) của tôi chạy ở mức khoảng 8-12FPS trên điện thoại của tôi, với OpenFL (vì nó được dịch sang C ++ và chạy qua Android NDK), cuối cùng tôi cũng có được hiệu năng rất mượt mà trên điện thoại.

Nó chắc chắn đáng để thử.


1

Một bản cập nhật cho tuần đầu tiên của năm 2020:

Cocoonjs có lẽ là một giải pháp vững chắc cho vấn đề này trong quá khứ nhưng họ đã ngừng hoạt động .. một trích dẫn từ trang web chính thức của họ nói lên tất cả

Thật đáng tiếc, chúng tôi tuyên bố rằng chúng tôi sẽ ngừng cung cấp dịch vụ yêu quý của mình, Cocoon.

Chúng tôi đã bắt đầu Ludei / Cocoon vì chúng tôi tin rằng tương lai của phát triển ứng dụng và trò chơi sẽ dựa trên HTML5. Thật không may, điều đó đã không xảy ra và sự phát triển bản địa mạnh mẽ hơn bao giờ hết.

Điều này thực sự phản ánh sự phát triển HTML5 cho thiết bị di động vào năm 2019 .. không phải là không thể, nhưng nó không hiệu quả như mong đợi ...

Tôi đang chuyển sang phát triển bản địa sau một số trò chơi sản xuất được xây dựng với PhaserCordova cho iOS và Android. Chống lại việc tăng trần hiệu suất ngay cả các cơ chế đơn giản nhất trên các thiết bị trung cấp

Chỉ để chia sẻ các tùy chọn giải pháp công nghệ / ngăn xếp tiếp theo của tôi để chọn cho bất kỳ ai nhìn thấy điều này trong hiện tại hoặc tương lai gần:

  • SpriteKit cho iOS và LibGDX cho Android: Đây có thể sẽ là giải pháp hiệu quả nhất mặc dù nó sẽ yêu cầu phát triển riêng cho từng nền tảng .. nhưng cũng sẽ ở mức "thấp nhất"

  • Cocos2D-X không thực sự chắc chắn rằng nó được hỗ trợ tốt như thế nào và nó vẫn là một lựa chọn hợp lệ nhưng nó phải rất thành thục và hiệu quả + bạn có thể viết bằng C ++ và xây dựng cho bất kỳ nền tảng nào có

  • Corona có vẻ như là một khung nền tảng và biểu diễn chéo thú vị (và miễn phí), sử dụng Lua sẽ cần phải kiểm tra nó so với các giải pháp khác được đề cập ở đây

  • Sử dụng một trong những động cơ hiện đại như Unity hoặc Godot . Không chắc chắn làm thế nào điều này được so sánh với hiệu suất khung được đề cập khôn ngoan

Hy vọng điều này sẽ giúp bất cứ ai ..


0

Nhìn thấy điều này vào một ngày khác, có thể đáng để xem xét để giải quyết vấn đề này. Nghe có vẻ là một ý tưởng khá hay với tôi: http://tmtg.net/glesjs/

Thực tế là nó hoạt động tốt khi ở trong trình duyệt, nhưng không phải khi trên Phonegap / Cordova thực sự rất lạ. Toàn bộ tình huống canvas / webGL trên Android (không thể nói cho iOS) luôn có vẻ khá tồi tệ đối với tôi. Chắc chắn một cái gì đó GOogle cần để thêm năng lượng vào, có lẽ Lollipop sẽ là một cải tiến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.