Activity
Einer der wichtigsten Komponenten einer App ist die Activity, die für die Darstellung einer Bildschirmseite und den darin befindlichen Steuerelementen (z.B. TextView) steht. Die Activity ist, wie der Name schon verrät, für eine Aktivität zuständig, die in den meisten Fällen von einem Benutzer ausgelöst wird. Die Activity, die in jeder App zuerst gestartet wird, ist der Launcher und um eine Activity überhaupt starten zu können, benötigst du Intents.
Im nachfolgenden Beispiel-Code kannst du sehen, wie eine Activity-Klasse in Java implementiert wird. Dabei steht zuerst die Sichtbarkeit „public“ und rechts neben dem Schlüsselwort „class“ der „Name der Activity„. Da jede Activity von einer der beiden Oberklassen „Activity“ oder „AppCompatActivity“ abgeleitet wird, muss rechts neben dem Activity-Namen zuerst das Schlüsselwort „extends“ und dann die jeweilige Oberklasse stehen. Zudem wird bei der Erstellung einer neuen Activity immer auch die Methode „onCreate()“ miterzeugt, in der die Oberfläche der Activity erstellt wird.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Service
Diese Komponente einer App läuft im Gegensatz zur Activity im Hintergrund ab und der Benutzer kommt damit nicht in Berührung. Ein Service wird immer dann eingesetzt, wenn etwas permanent im Hintergrund abgearbeitet werden soll (z.B. Lieder abspielen).
Der nachfolgende Beispiel-Code zeigt, dass ein Service stets als Unterklasse von „Service“ implementiert wird. Dabei wird auch hier zuerst die Sichtbarkeit „public“ und dann das Schlüsselwort „class“ geschrieben. Rechts davon steht der „Service-Name“ und dann zunächst „extends“ und zuletzt die Oberklasse „Service„. Außerdem wird in der Regel auch ein Konstruktor angelegt, der denselben Namen trägt, wie die Service-Klasse „MyService„.
public class MyService extends Service { public MyService() { } }
Broadcast Receiver
Ein Broadcast Receiver fängt alle Nachrichten oder Ereignisse ab, die von Android oder einer App gesendet werden (z.B. niedriger Akkustand). Er verarbeitet diese weiter ohne dabei mit dem Benutzer oder einer Activity kommuniziert zu haben. Außerdem hat der Broadcast Receiver, genauso wie ein Service, keine Benutzeroberfläche.
Nachfolgend siehst du die Implementierung eines Broadcast-Receivers in Java-Code. Hier stehen auch wieder zuerst „public“ und „class„, dann der „Name des Broadcast-Receivers“ und danach das Schlüsselwort „extends“ und die Oberklasse „BroadcastReceiver„, von der jeder BroadcastReceiver ableitet. Zudem wird die Methode „onReceive()“ angelegt, die später für den Empfang und die Weiterverarbeitung einer Broadcast-Nachricht zuständig ist.
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. throw new UnsupportedOperationException("Not yet implemented"); } }
Content Provider
Aufgrund der Architektur von Android ist es Apps nicht ohne weiteres möglich untereinander zu kommunizieren. Möchten nun verschiedene Apps Daten austauschen, so müssen sie einen Content Provider verwenden. Auch für System-Apps wie Kontakte oder Kalender müssen eigene Content Provider (Contacts Provider, Calendar Provider) eingesetzt werden, um darauf Zugriff zu bekommen.
Der folgende Beispiel-Code zeigt einen implementierten ContentProvider. Jeder ContentProvider wird durch „public“ und „class“ eingeleitet. Danach folgt der „Name des ContentProviders“ und dann wieder das Schlüsselwort „extends“ und die Oberklasse „ContentProvider„, von der jeder ContentProvider abgeleitet wird. Zudem wird ein Konstruktor mit dem Namen des Providers „MyContentProvider“ angelegt. Anschließend folgen mehrere Methoden, die unterschiedliche Aufgaben übernehmen. Diese Methoden beschreiben wir hier nicht genauer, aber wenn du dich dafür interessierst, kannst du dir bei jeder Methode die Kommentare bzw. TODOs durchlesen.
public class MyContentProvider extends ContentProvider { public MyContentProvider() { } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // Implement this to handle requests to delete one or more rows. throw new UnsupportedOperationException("Not yet implemented"); } @Override public String getType(Uri uri) { // TODO: Implement this to handle requests for the MIME type of the data // at the given URI. throw new UnsupportedOperationException("Not yet implemented"); } @Override public Uri insert(Uri uri, ContentValues values) { // TODO: Implement this to handle requests to insert a new row. throw new UnsupportedOperationException("Not yet implemented"); } @Override public boolean onCreate() { // TODO: Implement this to initialize your content provider on startup. return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO: Implement this to handle query requests from clients. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO: Implement this to handle requests to update one or more rows. throw new UnsupportedOperationException("Not yet implemented"); } }
Manifest
Das Android-Manifest ist keine weitere Komponente, sondern eine XML-Datei mit allen wichtigen Informationen zu einer App. Diese Datei muss jede Android-App besitzen und hier werden z.B. Versions-Code, Versions-Name, Activities, Services oder Content-Provider eingetragen. Die einzige Komponente, die nicht unbedingt in das Manifest eingetragen werden muss, ist dabei der Broadcast Receiver, der auch dynamisch über die Context-Methode „registerReceiver()“ registriert werden kann. Das Manifest hat den vollständigen Namen „AndroidManifest.xml“ und liegt im Wurzelverzeichnis der APK.