Before we dig down into the details of Android development, we need to understand first the underlying features and services of the platform so that we will be able to use its available tools.
In this section, we want to accomplish the following:
- Understand applications and their components
- Understand the concepts of:
- Activity
- Service
- Broadcast receiver
- Content Provider
- Intent
- Android Manifest
Applications
Android applications are written in Java. It has good separation (and corresponding security) from other applications.
- Each application runs in its own process
- Each process has its own separate VM
- Each application is assigned a unique Linux user ID – by default files of that application are only visible to that application (can be explicitly exported)
Components
Android applications are composed of components. Below are the components that can be included:
- Activities – visual user interface focused on a single thing a user can do
- Services – no visual interface – they run in the background
- Broadcast Receivers – receive and react to broadcast announcements
- Content Providers – allow data exchange between applications
Activities
- Basic component of most applications
- Most applications have several activities that start each other as needed
- Each is implemented as a subclass of the base Activity class
The View
- Each activity has a default window to draw in (although it may prompt for dialogs or notifications)
- The content of the window is a view or a group of views (derived from View or ViewGroup)
- Example of views: buttons, text fields, scroll bars, menu items, check boxes, etc.
- View(Group) made visible via Activity.setContentView() method.
Services
- Does not have a visual interface
- Runs in the background indefinitely
- Examples:
- Network downloads
- Playing music
- TCP/UDP server
- You can bind to an existing service and control its operation
Broadcast Receivers
- Receive and react to broadcast announcements
- Extend the class BroadcastReceiver
- Examples of broadcasts:
- Low battery, power connected, shutdown, timezone changed, etc.
- Other applications can initiate broadcasts
Content Providers
A content provider manages access to a central repository of data. It is primarily intended to be used by other applications, which access the provider using a provider client object. This makes some of the application data available to other applications and it is the only way to transfer data between applications in Android (no shared files, shared memory, pipes, etc.).
We need to extend the class ContentProvider in order to use this component. Other applications use a ContentResolver object to access the data provided via a ContentProvider.
Intents and Components Shutdown
- An intent is an Intent object with a message content.
- Activities, services and broadcast receivers are started by intents. ContentProviders are started by ContentResolvers:
- An activity is started by Context.startActivity(Intent intent) or Activity.startActivityForResult(Intent intent, int RequestCode)
- A service is started by Context.startService(Intent service)
- An application can initiate a broadcast by using an Intent in any of Context.sendBroadcast(Intent intent), Context.sendOrderedBroadcast(), and Context.sendStickyBroadcast()
Shutting Down Components
- Activities
- Can terminate itself via finish();
- Can terminate other activities it started via finishActivity();
- Services
- Can terminate via stopSelf();
- or Context.stopService();
- Content Providers
- Are only active when responding to ContentResolvers
- Broadcast Receivers
- Are only active when responding to broadcasts
Android Manifest
Its main purpose in life is to declare the components to the system:
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest . . . >
<application . . . >
<activity android:name=”com.example.project.FreneticActivity”
android:icon=”@drawable/small_pic.png”
android:label=”@string/freneticLabel”
. . . >
</activity>
. . . </application>
</manifest>
Intent Filters
Declare Intents handled by the current application (in the AndroidManifest):
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest . . . >
<application . . . >
<activity android:name=”com.example.project.FreneticActivity”
android:icon=”@drawable/small_pic.png”
android:label=”@string/freneticLabel”
. . . >
<intent-filter . . . >
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
<intent-filter . . . >
<action android:name=”com.example.project.BOUNCE” />
<data android:mimeType=”image/jpeg” />
<category android:name=”android.intent.category.DEFAULT” />
</intent-filter>
</activity>
. . .
</application>
</manifest>