QNA > P > Perché È 10 Volte Più Difficile Sviluppare Su Ios Che Su Android?

Perché è 10 volte più difficile sviluppare su iOS che su Android?

Se qualcuno vi ha detto così, allora ovviamente ha mentito.

Perché dovrei dire una cosa del genere? Sia Android che iOS, per quanto mi riguarda, hanno la stessa quantità di complessità e sono molto simili in molti modi. Non dovete preoccuparvi che uno sia 10 volte (molto esagerato) più difficile dell'altro.

Vorrei dimostrare questo creando una UITableView in iOS e una RecyclerView in Android. Ho scelto queste per la dimostrazione perché sono usate in quasi tutte le app in un modo o nell'altro.

UITableView in iOS:

Fai la tua classe Model:

main-qimg-bfbaad73cac41e6c246a96d5c23da098.webp

Fai la tua UITableViewCell, questa è la tua View:

main-qimg-155c67863aa540f4778a6a85d625a93a.webp

Crea il tuo Controller, che è l'UIViewController

main-qimg-e25d557607fe582b80fe4c8503d09588.webp

Ricerca i dati da un server, ho usato Firebase per questo, e ho scritto il codice nella classe Controller. Avrei potuto usare una classe diversa per questo, ma per questa piccola anteprima, funziona anche questa.

main-qimg-ee313abd5c5ea62c3a9e3f7d94472cf7.webp

Storyboard:

main-qimg-a14bc5d80328735d6749dc813f6dc424.webp

Il risultato è stato questo:

main-qimg-cd0ca47943508ab0f857ce8006ad1384.webp

Ora, posso fare la stessa cosa in Android

La classe Model:

main-qimg-2bfe46165b9f31efb4f04df0d9e12d55.webp

L'Adapter che è usato per fornire la RecyclerView

main-qimg-27408eaaa1bfbfd8c76baeb61f2b3ccb.webp main-qimg-92f8b89ad43ab3a1c838a2815985c69d.webp

Il layout della cella appare come segue:

main-qimg-fa7f0fe2aec9516bfa53ecfb04b18bd0.webp

Come avrete notato (se avete letto il codice), c'è un riferimento a una classe chiamata Commons. È una classe che uso per fare alcuni compiti di base. Per questo progetto, i Commons assomigliano a :

main-qimg-4d938c4f93867c5e48b026174a212284.webp

E infine, l'attività è stata fatta come segue:

main-qimg-b7838ca4c9c8716e6e09d64a7987148b.webp main-qimg-c5be6cc821d28ac3e62abc5f46e0e5ed.webp

E l'xml dell'attività assomiglia a:

main-qimg-f9630b1b3fa44e64ec4a5516ed2a67e8.webp

E il risultato che si ottiene è molto simile a quello che abbiamo ottenuto in iOS:

main-qimg-77db335dc3b12ca07c60520e5dcfd834.webp

Non si tratta solo del risultato, la complessità di implementazione è più o meno allo stesso livello e non c'è motivo di incolpare che uno sia 10 volte più difficile dell'altro. Non ha senso fare un'affermazione del genere.

E ora, dato che la domanda riguarda la difficoltà di implementare l'AutoLayout (che in realtà è piuttosto facile), implementerò due layout abbastanza difficili sia in Android che in iOS.

Questo è l'aspetto dei vincoli nello Storyboard:

main-qimg-03b0b993b332f544021b337b987d3e0f.webp

Non pretendo che questo sia un modo favorevole per implementare l'Auto Layout in un'applicazione di produzione dove il contenuto è molto dinamico. L'approccio utilizzato per affrontare un tale layout è completamente diverso.

Questo è il layout XML in Android:

main-qimg-128c68d5a5a183adb9454899c05822ed.webp main-qimg-25756bfc86a8ca81a293422138d08b27.webp main-qimg-596a4951255e0ee1a85ef594be7875a9.webp main-qimg-de71e55ec6075b0d3e4e7bbd68010017.webp main-qimg-420ac2f4b3ae5a35db497825c90cb3c2.webp

E l'output finale di entrambi i layout Android e iOS è il seguente:

Quindi, se credete che ci sia un problema con lo sviluppo iOS e AutoLayout in particolare, posso informarvi con piacere che vi sbagliate.

Vorrei anche affrontare qualcosa che Valerio Cietto ha detto nella sezione commenti.

I pixel indipendenti dalla densità non funzionano davvero nel modo in cui Google pubblicizza che funzionino. È ancora una misura indipendente dalla densità e rende la creazione del layout in Android molto più facile.

Ma,

main-qimg-d80d9d7d6ae0e5a90511a2c7f187de3a.webp

Entrambi i FrameLayout colorati in grigio scuro sono di 300dp di larghezza e 50 dp di altezza. Sì, questo è un caso estremo, ma ci sono ancora sottili differenze se si dà la larghezza e l'altezza di una vista in misure dp. che non è come Google vuole che tu li usi. Ammetto che avere misure dp con cui lavorare rende il compito molto più semplice quando si tratta di design di icone di sistema e molte altre cose.

Su come gli eventi touch sono gestiti in iOS e Android:

iOS:

main-qimg-49e914c19ef378bd31c74fd6168c59dd.webp

I tre metodi usati qui sono,

  • IBAction usando il drag and drop per il Button One
  • Usando addTarget per Button Two
  • Usando un TapGestureRecognizer per la pink View.

dove Android usa:

main-qimg-714aff54e54a07ceb31e3dd891b00cea.webp
  • Aggiungi un OnClickListener per la tua TexView, Button, etc
  • Aggiungendo un onClick alla tua View/Button, etc nell'XML e implementando lo stesso metodo che hai specificato nell'XML, nell'Activity padre. Questo usa una View come parametro, che è la classe madre di tutto ciò che si potrebbe usare nell'XML.

Ancora, non vedo un cambiamento drastico in nessuno dei due.

Disclaimer: Tutte le immagini (esclusi i codici) usate in questa risposta sono immagini di dominio pubblico da pixabay.com, tranne la foto di Hyderabad. Non so a chi appartenga quella foto.

Tutti i codici usati nella risposta sono stati scritti da me per rispondere a questa domanda.

Di Catton

Quali sono le principali differenze tra Adblock Plus e Adblock? :: È meglio comprare un iPhone 5s o un telefono Android?
Link utili