Differenze Android (Dalvik + Java vs Old School C ++)


8

Lo sviluppo in Android sarà diverso per me, dopo aver trascorso gli ultimi 10 anni a scrivere giochi in C ++. Quali sono le principali differenze / insidie ​​/ strozzature da sviluppare per Android? La mia grande preoccupazione è passare a Java, cosa mi mancherà di più?

Per essere più chiari: cosa mi perderei se avessi codificato tutto in Java rispetto al modo in cui normalmente codice C ++ per console?


Il titolo potrebbe essere un po 'migliore. Giusto per essere chiari, stai chiedendo "Qual è la differenza tra C ++ e Java sul telefono Android?"
Jesse Dorsey

6
Penso che se usi l'NDK ( developer.android.com/sdk/ndk/index.html ) puoi scrivere la maggior parte del tuo codice in C ++.
Chris Howe,

Risposte:


6

La cosa più grande che probabilmente ti mancherebbe sarebbe la gestione esplicita della memoria. Tra i lati positivi, Java ha informazioni sul tipo di runtime e generici reali. Vedi anche: http://developer.android.com/guide/practices/design/performance.html per alcuni suggerimenti di Google su come mantenere efficiente il tuo codice Java.

Raymond Chen si è recentemente dedicato alla raccolta dei rifiuti e alla gestione della memoria nel CLR e i suoi post sul blog sono fantastici per capire come funziona. (So ​​che i seguenti collegamenti sono per CLR, ma sono ancora rilevanti per lo sviluppo di Java). Vedi in particolare: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx e http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx

Detto questo, non c'è molta differenza tra Java e C ++ e, come ha sottolineato Chris, tu puoi codificare in C / C ++ su Android usando NDK.


grazie, "puoi codificare in C / C ++ su Android usando NDK", sì, lo apprezzo molto, ma perché restare sempre con le vecchie pistole se qualcosa risulta effettivamente migliore / più veloce.
Richard Fabian,

2
Oh, vedo a cosa stai arrivando. Java ha il vantaggio di avere un'enorme libreria standard e una libreria estremamente competente per gestire XML. La piattaforma Android estende la libreria standard con librerie per tutti i fantasiosi gadget hardware e alcune funzionalità extra lato utente. Java supporta anche la compilazione incrementale / il controllo degli errori, quindi riceverai feedback sugli errori non appena li digiti. Onestamente, non dovresti nemmeno temere le prestazioni. Non sarà veloce come C su bare metal, ma è comunque abbastanza veloce. Direi che non c'è molto di cui preoccuparsi.
Brett,

4

Chris Pruett di Google ha parlato della scrittura di giochi in tempo reale per Android in Google I / O 2009 e di nuovo nel 2010 . Parla delle prestazioni Java su Android tra gli altri argomenti. Ha anche realizzato un gioco, Replica Island , in Java e puoi scaricare il codice sorgente per avere un'idea di come potrebbe apparire un gioco Java per Android. Il suo blog sul gioco ha anche diversi articoli perspicaci.

Le insidie ​​tipiche sono simili a quelle della scrittura in altri linguaggi di immondizia raccolti , si utilizzano pool di oggetti e si allocano le cose in anticipo per evitare che il GC venga eseguito quando non lo si desidera. I metodi sono virtuali per impostazione predefinita in Java e aiutano a contrassegnarli come finali quando non è necessario sostituirli. Il plug-in Eclipse per Android include alcuni strumenti utili per aiutarti a profilare la tua applicazione e monitorare le allocazioni di heap.


2

Ti preoccupi troppo. L'API per OpenGL in Android, OpenGL-ES, è stata volutamente mantenuta come C-like. Vedi le specifiche OpenGL su http://www.khronos.org/opengles/ per i dettagli.

È anche possibile che non ti perda molto di nulla dal C ++. Molti sviluppatori, persino il famoso autore di programmazione Bruce Eckel ('Thinking in C ++', 'Thinking in Java'), hanno trovato Java un linguaggio molto più efficace per la programmazione orientata agli oggetti. Soprattutto perché le cose che hanno "perso" all'inizio non si sono rivelate così importanti dopo tutto.

Detto questo, ciò che mi manca di più è la capacità di sovrascrivere gli operatori, non solo i metodi. La sintassi è davvero più maldestra quando è necessario definire / sovrascrivere metodi anziché operatori.

Si consideri, ad esempio, l'aritmetica dei numeri complessi. È davvero elegante in C ++. Non così in Java. Ma questo risulta avere un impatto minimo sulla maggior parte dei progetti reali.

Alcune persone si lamentano dell'incapacità di fare ereditarietà multipla. Ma il tipo più utile di eredità multipla È il tipo che Java fa con l '"interfaccia", quindi non dovresti davvero perderlo così tanto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.