2010-05-23 47 views
14

Tôi đang tìm cách viết một trò chơi trên Android, khó khăn mà tôi không sở hữu một thiết bị Android. Đối với những người bạn sở hữu một thiết bị, hiệu suất trên trình giả lập liên quan đến hiệu suất thiết bị thực như thế nào? Tôi đặc biệt quan tâm đến các nhiệm vụ liên quan đến đồ họa.Hiệu suất trình giả lập Android so với hiệu suất thiết bị thực như thế nào?

Điều này rõ ràng phụ thuộc vào cả máy chạy trình mô phỏng và thiết bị cụ thể được đề cập, nhưng tôi đang nói số thô ở đây.

Câu hỏi này là duplicate, nhưng vì bài đăng đó đã lỗi thời quá nhiều nên tôi đã nhận thấy nó không liên quan đến bây giờ.

Trả lời

13

Nói chung, trình mô phỏng chậm hơn nhiều so với thiết bị ở các tác vụ CPU và GPU. Đó là ít nhất hai lý do:

  1. Các giả lập đang chạy opcodes ARM, chuyển đổi chúng thành lệnh x86 tương đương, mà là chậm
  2. Devices (thường) có tăng tốc đồ họa, trong khi môi trường mô phỏng không, mặc dù bất cứ điều gì thẻ video bạn có trên máy đang chạy trình mô phỏng

Để đưa mọi thứ vào góc nhìn, tôi làm Android của mình hoạt động trên Intel quad-core 2.66GHz với một card đồ họa khá đẹp. Đối với những video hoạt động tốt trên các thiết bị, tôi có thể đôi khi khiến chúng phát lại trong trình giả lập.

Trình mô phỏng nhanh hơn thiết bị, mặc dù tại I/O "đĩa". Khi bạn ghi vào "flash" trên trình mô phỏng, bạn đang ghi vào một tệp hình ảnh đĩa có thể nằm trên ổ đĩa cứng thông thường, giả sử bạn không sử dụng ổ SSD. Trên thực tế, việc viết flash trên một thiết bị có thể chậm hơn rất nhiều - Brad Fitzpatrick, tại hội nghị Google I | O 2010 tuần trước, đã trích dẫn các cú sốc lên tới 200ms để ghi một byte đơn lên flash. Và, sự kết hợp giữa Android, flash và hệ thống tập tin yaffs2 dường như làm cho thiết bị phát triển chậm hơn ở flash I/O khi flash đầy. Do đó, đề xuất của anh là làm mọi flash ghi trong chuỗi nền thay vì chuỗi ứng dụng chính, nơi nó có thể kết nối giao diện người dùng và dẫn đến ứng dụng "janky".

(rõ ràng, "janky" là một thuật ngữ kỹ thuật ... :-)

BTW, khi nó xuất hiện trên mạng, chắc chắn xem bài thuyết trình của Brad trên YouTube. Nó có thể là một chút khó khăn để làm theo ở lần, bởi vì ông đã nói rất nhanh, nhưng nó có đầy đủ các mẩu tin hữu ích liên quan đến hiệu suất.

+0

Cảm ơn, đó là thông tin hữu ích. Trên cùng một vấn đề, giả lập có sử dụng cùng một máy ảo như một thiết bị không? Cụ thể, tôi có nên mong đợi hoạt động GC tương tự không? – uj2

+0

Nếu bằng "VM", bạn có nghĩa là máy ảo Dalvik để chạy các ứng dụng được viết bằng Java, sau đó có. Xét về hoạt động GC, nguồn duy nhất của sự khác biệt tiềm năng là trong kích thước tối đa của ứng dụng heap. Các thiết bị cũ hơn, và tôi nghĩ giả lập, giới hạn bạn thành một vùng lưu trữ 16MB. Các thiết bị mới hơn có nhiều RAM hơn và màn hình lớn hơn hỗ trợ dung lượng 24MB. Nó không rõ ràng nếu có một cách để kiểm soát kích thước heap ứng dụng trong trình mô phỏng. Bạn có thể muốn thử nghiệm của bạn trên kích thước heap nhỏ hơn, anyway. – CommonsWare

+0

Tôi đã gặp vấn đề thời gian chạy với mã trên trình giả lập, một tabactivity mất 8-10 giây để tải trên trình giả lập, trên thiết bị thực mất 1-2 giây, hầu như không thể nhìn thấy lag. – Pentium10

1

Việc chuyển đổi mã opcodes ARM thành x86 như đã đề cập là nguồn trễ chính trong trình mô phỏng.

Theo kinh nghiệm của tôi, trình giả lập rất chậm và rất không đại diện cho những gì có thể được mong đợi từ một thiết bị, đặc biệt là bộ xử lý Snapdragon.

Ngay cả các ứng dụng cực kỳ cơ bản trong trình mô phỏng (tôi đang nói một LinearLayout với một vài TextView) mất một lúc để tải và thực thi hoạt động.

Chủ yếu, mặc dù, độ trễ dường như là ban đầu. Bằng cách đó, tôi có nghĩa là nếu bạn di chuyển một danh sách trong trình mô phỏng, nó sẽ mất một giây để nhận ra hành động và có một chút giật lúc đầu, nhưng nó trở nên mượt mà sau đó.

Tóm lại, tôi sẽ không khuyên bạn nên phát triển trò chơi với việc sử dụng trình giả lập cho bất kỳ điều gì khác ngoài lập trình ban đầu, gỡ lỗi và có thể thấy cách hoạt động được đặt ra.Bạn sẽ không có bất kỳ ý tưởng nào về khả năng chơi mà không có thiết bị thực.



P.S. Đừng quên thử nghiệm trò chơi của bạn trên các phiên bản Android khác nhau và tìm kiếm các sự cố thường gặp khi trò chơi gặp phải trong các phiên bản Android khác nhau.

+0

Tôi ước họ biên dịch giả lập cho x86 như Palm đã làm với bộ mô phỏng webOS của họ, mặc dù thực tế điện thoại của họ sử dụng một phiên bản của webOS được biên dịch cho bộ vi xử lý ARM. Điều này có thể dễ dàng thực hiện với Android không? – Vitaly

2

Kiểm tra điều này đẹp article nơi hiển thị cách người ta có thể so sánh tốc độ CPU của trình mô phỏng với tốc độ CPU của thiết bị sử dụng BogoMIPS.

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