Sự khác biệt của Android (Dalvik + Java so với Old School C ++)


8

Phát triển trong Android sẽ khác với tôi, đã trải qua 10 năm chơi game mã hóa trong C ++. Sự khác biệt / cạm bẫy / tắc nghẽn chính để phát triển cho Android là gì? Lo lắng lớn của tôi là chuyển sang Java, tôi sẽ bỏ lỡ điều gì nhất?

Để rõ ràng hơn: tôi sẽ bỏ lỡ điều gì nếu tôi mã hóa toàn bộ mọi thứ trong Java so với cách tôi thường mã hóa C ++ cho các bảng điều khiển?


Tiêu đề có thể tốt hơn một chút. Nói rõ hơn là bạn đang hỏi "Sự khác biệt giữa C ++ và Java trên điện thoại Android là gì?"
Jesse Dorsey

6
Tôi nghĩ rằng nếu bạn sử dụng NDK ( developer.android.com/sdk/ndk/index.html ) thì bạn có thể viết hầu hết mã của mình trong C ++.
Chris Howe

Câu trả lời:


6

Điều lớn nhất mà bạn có thể bỏ lỡ sẽ là quản lý bộ nhớ rõ ràng. Về mặt tích cực, Java có thông tin kiểu thời gian chạy và tổng quát thực sự. Đồng thời xem: http://developer.android.com/guide/practices/design/performance.html để biết một số mẹo từ Google về cách giữ cho mã Java của bạn hiệu quả.

Raymond Chen gần đây đã mạo hiểm về việc thu gom rác và quản lý bộ nhớ trong CLR và các bài đăng trên blog của anh ấy rất tuyệt để hiểu cách thức hoạt động của nó. (Tôi biết các liên kết sau là dành cho CLR, nhưng chúng vẫn phù hợp để phát triển Java). Đặc biệt là xem: http://bloss.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspxhttp://bloss.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx

Điều đó đang được nói, không có nhiều sự khác biệt giữa Java và C ++ và như Chris đã chỉ ra, bạn có thể viết mã bằng C / C ++ trên Android bằng NDK.


cảm ơn, "bạn có thể mã hóa bằng C / C ++ trên Android bằng NDK", vâng tôi đánh giá cao điều đó, nhưng tại sao lại luôn sử dụng súng cũ nếu có thứ gì đó thực sự biến dự án tốt hơn / nhanh hơn.
Richard Fabian

2
Ồ, tôi thấy những gì bạn đang nhận được. Java có tiền thưởng là có một thư viện tiêu chuẩn khổng lồ và một thư viện cực kỳ có thẩm quyền để xử lý XML. Nền tảng Android mở rộng thư viện tiêu chuẩn với các thư viện cho tất cả các tính năng phần cứng ưa thích và một số chức năng bổ sung, phía người dùng. Java cũng hỗ trợ kiểm tra biên dịch / lỗi gia tăng, do đó bạn sẽ nhận được phản hồi về các lỗi ngay khi bạn nhập chúng. Thành thật mà nói, bạn cũng không nên sợ hiệu suất. Nó sẽ không nhanh như C trên kim loại trần, nhưng nó vẫn khá nhanh. Tôi sẽ nói rằng không có nhiều điều phải lo lắng.
Brett

4

Chris Pruett của Google đã nói về việc viết các trò chơi thời gian thực cho Android trong Google I / O 2009 và một lần nữa vào năm 2010 . Ông nói về hiệu suất Java trên Android trong số các chủ đề khác. Anh ấy cũng đã tạo ra một trò chơi, Đảo bản sao , bằng Java và bạn có thể tải xuống mã nguồn để có ý tưởng về một trò chơi Java Android có thể trông như thế nào. Của anh ấyBlog về trò chơi cũng có một số bài viết sâu sắc.

Những cạm bẫy điển hình tương tự như việc viết bằng các ngôn ngữ được thu gom rác khác , bạn sử dụng nhóm đối tượng và phân bổ công cụ trước để tránh việc GC chạy khi bạn không muốn. Các phương thức là ảo theo mặc định trong Java và nó giúp đánh dấu chúng là cuối cùng khi bạn không cần ghi đè chúng. Plugin Android Eclipse đi kèm với một số công cụ gọn gàng để giúp bạn lập hồ sơ cho ứng dụng của mình và theo dõi phân bổ heap.


2

Bạn đang lo lắng quá nhiều. API cho OpenGL trong Android, OpenGL-ES, được cố tình giữ giống như C. Xem thông số kỹ thuật OpenGL tại http://www.khronos.org/opengles/ để biết chi tiết.

Thậm chí có khả năng bạn sẽ không bỏ lỡ nhiều thứ từ C ++. Rất nhiều nhà phát triển, thậm chí là tác giả lập trình nổi tiếng Bruce Eckel ('Suy nghĩ bằng C ++', 'Suy nghĩ bằng Java') đã tìm thấy Java một ngôn ngữ hiệu quả hơn nhiều cho lập trình hướng đối tượng. Phần lớn là vì những điều họ 'bỏ lỡ' ban đầu hóa ra lại không quá quan trọng.

Điều đó nói rằng, điều tôi nhớ nhất là khả năng ghi đè các toán tử, không chỉ các phương thức. Cú pháp thực sự vụng về hơn khi bạn phải xác định / ghi đè phương thức thay vì toán tử.

Hãy xem xét, ví dụ số học số phức. Nó thực sự thanh lịch trong C ++. Không như vậy trong Java. Nhưng điều này hóa ra có tác động tối thiểu đến hầu hết các dự án thực tế.

Một số người phàn nàn về việc không thể thực hiện nhiều kế thừa. Nhưng loại đa thừa kế hữu ích nhất là loại mà Java làm với 'giao diện', vì vậy bạn không nên bỏ lỡ nó nhiều như vậy.

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.