Vergleichen Sie die H5-Entwicklung und die Android-Entwicklung

Vergleichen Sie die H5-Entwicklung und die Android-Entwicklung

1. Vergleich der Projektstruktur

Struktur des H5-Entwicklungsprojekts:

Bei der H5-Entwicklung ist die Projektstruktur relativ einfach und enthält normalerweise HTML-, CSS- und JavaScript-Dateien. Wenn Sie Vue.js verwenden, verfügen Sie möglicherweise auch über einige Einzeldateikomponenten (.vue).

/project
|-- /src
|   |-- index.html
|   |-- /assets
|       |-- style.css
|       |-- /images
|   |-- /components
|       |-- HelloWorld.vue
|-- package.json
Struktur des Android-Entwicklungsprojekts:

Die Android-Projektstruktur ist relativ komplex und umfasst Java-Code, XML-Layoutdateien, Ressourcendateien, Gradle-Build-Dateien usw.

/app
|-- /src
|   |-- /main
|   |   |-- /java
|   |   |   |-- com.example.myapp
|   |   |       |-- MainActivity.java
|   |   |-- /res
|   |       |-- /drawable
|   |       |-- /layout
|   |       |-- /values
|-- /build
|-- /gradle
|-- build.gradle
|-- settings.gradle
|-- AndroidManifest.xml

2. Vergleich zwischen Aktivität und Webseite

Von H5 entwickelte Seite:

H5-Seiten bestehen normalerweise aus HTML, CSS und JavaScript. Sie werden über den Browser gerendert und Benutzer interagieren mit der Seite. In Vue.js können Seitenstruktur und -verhalten einfach über Vue-Komponenten organisiert werden.

<!-- HelloWorld.vue -->
<template>
  <div>
    <h1>{
   
   { message }}</h1>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
      
      
  data() {
      
      
    return {
      
      
      message: 'Hello World!'
    };
  },
  methods: {
      
      
    changeMessage() {
      
      
      this.message = 'New Message!';
    }
  }
};
</script>

<style scoped>
h1 {
      
      
  color: blue;
}
</style>
Von Android entwickelte Aktivität:

In der Android-Entwicklung ist Aktivität die Komponente, über die Benutzer mit Anwendungen interagieren. Aktivitäten werden normalerweise in Java-Code geschrieben und definieren ihre Schnittstelle in XML-Layoutdateien.

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.textView);
        Button button = findViewById(R.id.button);

        textView.setText("Hello World!");

        button.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                textView.setText("New Message!");
            }
        });
    }
}
<!-- activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Change Message"
        android:layout_below="@id/textView"
        android:layout_marginTop="16dp" />
</RelativeLayout>

3. Vergleich von Layout und UI-Design

Layout und UI-Design für die H5-Entwicklung:

Bei der H5-Entwicklung wird CSS für das Seitenlayout und die Stilgestaltung verwendet. Responsive Design und Flex-Layout erleichtern die Darstellung von Seiten auf verschiedenen Bildschirmgrößen und Geräten.

/* style.css */
body {
    
    
  font-family: 'Arial', sans-serif;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  background-color: #f0f0f0;
}

h1 {
    
    
  color: blue;
}

button {
    
    
  background-color: #4CAF50;
  color: white;
  padding: 10px 20px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}
Layout und UI-Design für die Android-Entwicklung:

Bei der Android-Entwicklung liegen Layoutdateien im XML-Format vor und verschiedene Layoutcontainer und Steuerelemente werden zum Definieren der Anwendungsschnittstelle verwendet. Anpassung

Layoutmethoden wie Controller und ConstraintLayout bieten flexiblere Gestaltungsmöglichkeiten.

<!-- fragment_my.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is my custom Fragment!"
        android:textSize="18sp"
        android:textColor="@android:color/black"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="16dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click me"
        android:background="@android:color/holo_green_dark"
        android:textColor="@android:color/white"
        android:layout_gravity="center_horizontal"/>
</LinearLayout>

4. Datenspeichervergleich

Von H5 entwickelter Datenspeicher:

Bei der H5-Entwicklung werden Daten normalerweise im lokalen Speicher des Browsers (localStorage) gespeichert oder über Netzwerkanforderungen abgerufen. Verwalten Sie den Seitenstatus ganz einfach mit der Datenbindung und Statusverwaltung von Vue.js.

// Using local storage in Vue.js
export default {
    
    
  data() {
    
    
    return {
    
    
      username: localStorage.getItem('username') || 'Guest'
    };
  },
  methods: {
    
    
    updateUser(username) {
    
    
      this.username = username;
      localStorage.setItem('username', username);
    }
  }
};
Von Android entwickelter Datenspeicher:

Android bietet eine Vielzahl von Datenspeichermethoden, darunter SharedPreferences, Dateispeicherung, SQLite-Datenbank und Room-Persistenzbibliothek. Datenbankoperationen können mithilfe der Room-Bibliothek vereinfacht werden.

// Using SharedPreferences in Android
SharedPreferences preferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", "JohnDoe");
editor.apply();

// Using Room database in Android
@Entity
public class User {
    
    
    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "username")
    public String username;
}

@Dao
public interface UserDao {
    
    
    @Insert
    void insert(User user);

    @Query("SELECT * FROM user WHERE username = :username")
    User getUserByUsername(String username);
}

5. Vergleich der Netzwerkanforderungen

Netzwerkanfrage für H5-Entwicklung:

In der H5-Entwicklung verwenden Netzwerkanfragen normalerweise XMLHttpRequestObjekte in JavaScript oder moderneren fetchAPIs. Sie können auch die Lebenszyklusfunktionen von Vue.js verwenden, um asynchrone Anforderungen zu verarbeiten.

// Using fetch in H5
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
Von Android entwickelte Netzwerkanfragen:

Verwenden Sie in der Android-Entwicklung , HttpURLConnectionoder OkHttpandere Netzwerkbibliotheken, um Netzwerkanfragen zu stellen. Netzwerkanforderungen werden normalerweise in einer asynchronen Aufgabe ausgeführt, um eine Blockierung des Hauptthreads zu vermeiden.

// Using OkHttp in Android
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.example.com/data")
  .build();

client.newCall(request).enqueue(new Callback() {
    
    
  @Override
  public void onResponse(Call call, Response response) throws IOException {
    
    
    String responseData = response.body().string();
    Log.d("NetworkResponse", responseData);
  }

  @Override
  public void onFailure(Call call, IOException e) {
    
    
    Log.e("NetworkError", "Error: " + e.getMessage());
  }
});

6. Vergleich der Multi-Thread-Verarbeitung

Multithread-Verarbeitung für die H5-Entwicklung:

Bei der H5-Entwicklung wird JavaScript in einem einzelnen Thread ausgeführt, Web Worker können jedoch Skripte im Hintergrund ausführen. Web Worker ermöglichen die Ausführung von Skripten in separaten Threads, um die Leistung zu verbessern.

// Using Web Workers in H5
// main.js
const worker = new Worker('worker.js');

worker.postMessage('Hello from main thread!');

worker.onmessage = function(event) {
    
    
  console.log('Message from worker:', event.data);
};

// worker.js
onmessage = function(event) {
    
    
  console.log('Message from main thread:', event.data);
  postMessage('Hello from worker thread!');
};
Multithreading-Verarbeitung für die Android-Entwicklung:

In der Android-Entwicklung wird Multithreading normalerweise mithilfe von Klassen wie AsyncTask, Handlerund implementiert. Besonders nützlich für die Ausführung asynchroner Aufgaben im Hintergrund und die Aktualisierung der Benutzeroberfläche.ThreadAsyncTask

// Using AsyncTask in Android
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
    
    
  @Override
  protected String doInBackground(Void... params) {
    
    
    // Perform background computation
    return "Result from background computation";
  }

  @Override
  protected void onPostExecute(String result) {
    
    
    // Update UI with result
    Log.d("AsyncTaskResult", result);
  }
}

// Execute the AsyncTask
new MyAsyncTask().execute();

7. Vergleich der Berechtigungsverwaltung

Berechtigungsverwaltung für die H5-Entwicklung:

Da in der H5-Entwicklung JavaScript im Browser ausgeführt wird, öffnet der Browser für viele sensible Vorgänge (z. B. geografischer Standort, Kamerazugriff usw.) ein Berechtigungsanforderungsfeld, das vom Benutzer manuell autorisiert wird.

// Request geolocation permission in H5
if (navigator.geolocation) {
    
    
  navigator.geolocation.getCurrentPosition(
    position => console.log('Location:', position),
    error => console.error('Error getting location:', error)
  );
} else {
    
    
  console.error('Geolocation is not supported in this browser.');
}
Berechtigungsverwaltung für die Android-Entwicklung:

Bei der Android-Entwicklung ist die Berechtigungsverwaltung ein wichtiger Sicherheitsaspekt. Entwickler müssen die erforderlichen Berechtigungen in AndroidManifest.xml deklarieren und zur Laufzeit vertrauliche Berechtigungen anfordern.

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

// Request location permission in Android
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
    != PackageManager.PERMISSION_GRANTED) {
  // Permission is not granted, request it
  ActivityCompat.requestPermissions(this,
      new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
      MY_PERMISSIONS_REQUEST_LOCATION);
} else {
  // Permission already granted
  // Proceed with the operation
}

8. Vergleich der Datenbindung

In H5 entwickelte Datenbindung:

In H5 wird die Datenbindung normalerweise über Vue.js implementiert. Das reaktionsfähige System von Vue.js kann Seitenelemente problemlos an das Datenmodell binden, um eine bidirektionale Datenbindung zu erreichen.

<!-- Using Vue.js for data binding in H5 -->
<template>
  <div>
    <h1>{
   
   { message }}</h1>
    <input v-model="message" placeholder="Type something...">
  </div>
</template>

<script>
export default {
      
      
  data() {
      
      
    return {
      
      
      message: 'Hello World!'
    };
  }
};
</script>

<style scoped>
h1 {
      
      
  color: blue;
}
</style>
Datenbindung für die Android-Entwicklung:

In der Android-Entwicklung kann die Datenbindung durch findViewByIdund erreicht werden ViewBinding. ViewBindingist eine modernere Möglichkeit, durch die Generierung von Bindungsklassen einen typsicheren Zugriff auf Ansichten bereitzustellen.

// Using ViewBinding for data binding in Android
// activity_main.xml
<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!" />

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    
    
    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.textView.setText("New Message!");
    }
}

9. Vergleich von Sonderberechtigungen

Sondergenehmigungen für die H5-Entwicklung:

In H5 öffnet der Browser für einige spezielle Berechtigungen (z. B. geografischer Standort, Kamera, Mikrofon usw.) normalerweise ein Berechtigungsanforderungsfeld, wenn der Benutzer versucht, auf diese Ressourcen zuzugreifen, und der Benutzer autorisiert dies manuell.

// Request camera permission in H5
if (navigator.mediaDevices) {
    
    
  navigator.mediaDevices.getUserMedia({
    
     video: true })
    .then(stream => console.log('Camera access granted'))
    .catch(error => console.error('Error getting camera access:', error));
} else {
    
    
  console.error('MediaDevices API is not supported in this browser.');
}
Sonderberechtigungen für die Android-Entwicklung:

Bei der Android-Entwicklung müssen spezielle Berechtigungen in AndroidManifest.xml deklariert und zur Laufzeit angefordert werden. Für die Verwendung der Kamera müssen beispielsweise CAMERABerechtigungen zur Laufzeit deklariert und angefordert werden.

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />

// Request camera permission in Android
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
    != PackageManager.PERMISSION_GRANTED) {
  // Permission is not granted, request it
  ActivityCompat.requestPermissions(this,
      new String[]{Manifest.permission.CAMERA},
      MY_PERMISSIONS_REQUEST_CAMERA);
} else {
  // Permission already granted
  // Proceed with camera operation
}

10. Materialdesign-Vergleich

Von H5 entwickeltes Materialdesign:

In der H5-Entwicklung kann Material Design durch die Einführung der Material Design-Bibliothek von Google oder die Verwendung einiger Bibliotheken von Drittanbietern implementiert werden. Diese Bibliotheken stellen Komponenten und Stile bereit, die in der Material Design-Spezifikation definiert sind.

<!-- Using Materialize CSS for Material Design in H5 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">

<!-- A button with Material Design style -->
<a class="waves-effect waves-light btn">Click me</a>
Materialdesign für die Android-Entwicklung:

In der Android-Entwicklung ist Material Design die integrierte Designsprache des Systems, die direkt mithilfe der nativen Steuerelemente und Stile von Android implementiert werden kann.

<!-- Using Material Design in Android -->
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me"
    style="?android:attr/borderlessButtonStyle"/>

11. Zusammenfassung und Lernressourcen

Zusammenfassung der H5-Entwicklung und Android-Entwicklung:
  • Projektstruktur und Sprachunterschiede: Die H5-Entwicklung verwendet normalerweise HTML, CSS und JavaScript, und die Projektstruktur ist relativ einfach. Die Android-Entwicklung verwendet Java oder Kotlin und die Projektstruktur ist komplexer, einschließlich Java-Code, XML-Layoutdateien usw.

  • Seiten- und UI-Design: H5 verwendet HTML und CSS für das Layout- und Stildesign, während die Android-Entwicklung XML und Java/Kotlin-Code für das Interface-Design verwendet.

  • Datenspeicherung: H5 nutzt den lokalen Speicher des Browsers oder stellt Netzwerkanfragen, während Android mehrere Datenspeicherungsmethoden wie SharedPreferences, Dateispeicherung und SQLite-Datenbanken bereitstellt.

  • Netzwerkanfrage: H5 verwendet XMLHttpRequestoder API , fetchum Netzwerkanfragen zu stellen, Android verwendet HttpURLConnectionusw.OkHttp

  • Multithreading: In H5 kann Multithreading mithilfe von Web Workern erreicht werden. In Android verwendet die Multithread-Verarbeitung normalerweise Klassen wie AsyncTask, Handlerund Thread.

  • Berechtigungsverwaltung: H5 öffnet automatisch ein Berechtigungsanforderungsfeld über den Browser, während Android Berechtigungen in AndroidManifest.xml deklarieren und zur Laufzeit Berechtigungen anfordern muss.

  • Datenbindung: H5 verwendet Frameworks wie Vue.js, um die Datenbindung zu implementieren, während Android findViewByIdund verwenden kann ViewBinding.

  • Sonderberechtigungen: H5 implementiert den Zugriff auf Sonderberechtigungen über den Browser, während Android in AndroidManifest.xml deklariert und zur Laufzeit angefordert werden muss.

  • Material Design: H5 kann die Material Design-Bibliothek einführen, und Android unterstützt Material Design nativ.

Empfohlene Lernressourcen:

Guess you like

Origin blog.csdn.net/qq_51447496/article/details/135447126