Pertemuan 2 - Activity
Pertemuan 2 - Activity
Pertemuan 2 - Activity
To implement android apps, Android Studio is the official IDE (Integrated Development
Environment) which is freely provided by Google for android app development.
Once we setup android development environment using android studio and if we create a
sample application using android studio, our project folder structure will be like as shown
below. In case if you are not aware of creating an application using an android studio please
check this Android Hello World App.
The Android project structure on the disk might be differs from the above representation. To
see the actual file structure of the project, select Project from the Project dropdown instead of
Android.
The android app project will contain different types of app modules, source code files, and
resource files. We will explore all the folders and files in the android app.
Java Folder
This folder will contain all the java source code (.java) files which we’ll create during the
application development, including JUnit test code. Whenever we create any new
project/application, by default the class file MainActivity.java will create automatically under
the package name “com.tutlane.helloworld” like as shown below.
res (Resources) Folder
It’s an important folder that will contain all non-code resources, such as bitmap images, UI
strings, XML layouts like as shown below.
The res (Resources) will contain a different type of folders that are
Gradle Scripts
In android, Gradle means automated build system and by using this we can define a build
configuration that applies to all modules in our application. In Gradle build.gradle (Project),
and build.gradle (Module) files are useful to build configurations that apply to all our app
modules or specific to one app module.
Following is the structure of Gradle Scripts in the android application.
Following are the important files which we need to implement an app in android studio.
We can make required design modifications in activity_main.xml file either using Design or
Text modes. If we switch to Text mode activity_main.xml file will contain a code like as
shown below.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tutlane.helloworld.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Following is the default code of MainActivity.java file which is generated by our HelloWorld
application.
package com.tutlane.helloworld;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
These are the main folders and files required to implement an application in android studio. If
you want to see the actual file structure of the project, select Project from the Project
dropdown instead of Android.
Android Application Components
(Activities, Intents, Views, Layouts, Service)
In android, application components are the basic building blocks of an application and these
components will act as an entry point to allow system or user to access our app.
The following are the basic core application components that can be used in Android
application.
• Activities
• Intents
• Content Providers
• Broadcast Receivers
• Services
All these application components are defined in the android app description file
(AndroidMainfest.xml) like as shown below.
…….
</application>
</manifest>
Android Activities
In android, Activity represents a single screen with a user interface (UI) and it will acts an entry
point for the user’s to interact with app.
For example, a contacts app that is having multiple activities like showing a list of contacts,
add a new contact, and another activity to search for the contacts. All these activities in the
contact app are independent of each other but will work together to provide a better user
experience.
To know more about Activities in android check Android Activities.
Android Intents
In android, Intent is a messaging object which is used to request an action from another
component.
• Starting an Activity
• Starting a Service
• Delivering a Broadcast
1. Implicit Intents
2. Explicit Intents
Android Services
In android, Service is a component that keeps an app running in the background to perform
long-running operations based on our requirements. For Service, we don’t have any user
interface and it will run the apps in background like play music in background when the user
in different app.
• Local Services
• Remote Services
Generally, we use Intents to deliver broadcast events to other apps and Broadcast Receivers
use status bar notifications to let the user know that broadcast event occurs.
To know more about Broadcast Receivers in android check this Android Broadcast Receivers.
By using Content Providers, other apps can query or modify the data of our app based on the
permissions provided by content provider. For example, android provides a Content Provider
(ContactsContract.Data) to manage contacts information, by using proper permissions any
app can query the content provider to perform read and write operations on contacts
information.
To know more about Content Providers in android check this Android Content Provider.
Additional Components
In android, we have additional components which are used to build the relationship between
the above components (Activities, Intents, Content Providers, Services and Broadcast
Receivers) to implement our application logic, those are
Component Description
Fragments These are used to represent the portion of user interface in an activity
Layouts These are used to define the user interface (UI) for an activity or app
These are used to build a user interface for an app using UI elements like buttons,
Views
lists, etc.
To build an android app we required external elements like images, audio files,
Resources
etc. other than coding
It’s a configuration file (AndroidManifest.xml) for the application and it will
Manifest
contain the information about Activities, Intents, Content Providers, Services,
File
Broadcast Receivers, permissions, etc.
These are the main application components which are required to build an android application
based on our requirements.
Android Activity Lifecycle
In android, Activity represents a single screen with a user interface (UI) of an application and
it will acts an entry point for users to interact with an app.
Generally, the android apps will contain multiple screens and each screen of our application
will be an extension of Activity class. By using activities, we can place all our android
application UI components in a single screen.
From the multiple activities in android app, one activity can be marked as a main activity and
that is the first screen to appear when we launch the application. In android app each activity
can start another activity to perform different actions based on our requirements.
For example, a contacts app which is having multiple activities, in that the main activity screen
will show a list of contacts and from the main activity screen we can launch other activities
that provide screens to perform tasks like add a new contact and search for the contacts. All
these activities in the contact app are loosely bound to other activities but will work together
to provide a better user experience.
Generally, in android there is a minimal dependency between the activities in an app. To use
activities in application we need to register those activities information in our app’s manifest
file (AndroidMainfest.xml) and need to manage activity life cycle properly.
To use activities in our application we need to define an activities with required attributes in
manifest file (AndroidMainfest.xml) like as shown below
…….
</activity>
…….
</application>
</manifest>
The activity attribute android:name will represent the name of class and we can also add
multiple attributes like icon, label, theme, permissions, etc. to an activity element based on our
requirements.
In android application, activities can be implemented as a subclass of Activity class like as
shown below.
By using activity cal-back methods we can define how our activity can behave when the user
enter or leaves our application.
Android system initiates its program within an Activity starting with a call on onCreate()
callback method. There is a sequence of callback methods that start up an activity and a
sequence of callback methods that tear down an activity.
This section will give you detailed information about callback methods to handle activity
transitions between states during the lifecycle.
onCreate()
This is the first callback method and it fires when the system creates an activity for the first
time. During the activity creation, activity entered into a Created state.
If we have an application start-up logic that needs to perform only once during the life cycle of
an activity, then we can write that logic in onCreate() method.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Once onCreate() method execution is finished, the activity will enter into Started state and
the system calls the onStart() method.
onStart()
The onStart() callback method will invoke when an activity entered into Started State by
completing onCreate() method. The onStart() method will make an activity visible to the
user and this method execution will finish very quickly.
@Override
protected void onStart()
{
super.onStart()
}
After completion of onStart() method execution, the activity enters into Resumed state and
system invoke the onResume() method.
onResume()
When an activity entered into Resumed state, the system invokes onResume() call back
method. In this state activity start interacting with the user that means user can see the
functionality and designing part of an application on the single screen.
The app will stay in this Resumed state until an another activity happens to take focus away
from the app like getting a phone call or screen turned off, etc.
In case if any interruption events happen in Resumed state, the activity will enter into Paused
state and the system will invoke onPause() method.
After an activity returned from Paused state to Resumed state, the system again will call
onResume() method due to this we need to implement onResume() method to initialize the
components that we release during onPause() method
@Override
public void onResume() {
super.onResume();
if (mCamera == null) {
initializeCamera();
}
}
If any interruption happens in Resumed state, the activity will enter into Paused state and the
system will invoke onPause() method.
onPause()
Whenever the user leaves an activity or the current activity is being Paused then the system
invokes onPause() method. The onPause() method is used to pause operations like stop
playing the music when the activity is in a paused state or pass an activity while switching from
one app to another app because every time only one app can be focused.
@Override
public void onPause() {
super.onPause();
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
After completion of onPause() method execution, the next method is either onStop() or
onResume() depending on what happens after an activity entered into a Paused state.
onStop()
The system will invoke onStop() callback method when an activity no longer visible to the
user, the activity will enter into Stopped state. This happens due to current activity entered into
Resumed state or newly launched activity covers complete screen or it’s been destroyed.
The onStop() method is useful to release all the app resources which are no longer needed to
the user.
@Override
protected void onStop()
{
super.onStop();
}
The next callback method which raised by the system is either onRestart(), in case if the
activity coming back to interact with the user or onDestroy(), in case if the activity finished
running.
onRestart()
The system will invoke onRestart() method when an activity restarting itself after stopping
it. The onRestart() method will restore the state of activity from the time that is being
stopped.
The onRestart() callback method in android activity will always be followed by onStart()
method.
onDestroy()
The system will invoke onDestroy() method before an activity is destroyed and this is the
final callback method received by the android activity.
The system will invoke this onDestory() callback method either the activity is finishing or
system destroying the activity to save space.
@Override
public void onDestroy()
{
super.onDestroy();
}
The onDestroy() method will release all the resources which are not released by previous
callback onStop() method.
Following is the pictorial representation of the Android Activity Life cycle which shows how
Activity will behave in different stages using callback methods.
Whenever the user trying to leave an activity like switching from one app to another app, the
system will use callback methods to dismantle the activity completely or partially to resume
the activity from where the user left off.
Based on our requirements we can implement the activity in the android app using the callback
method and it’s not necessary to use all callback methods in each android application.
package com.tutlane.helloworld;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Activity Lifecycle","onCreate invoked");
}
@Override
protected void onStart() {
super.onStart();
Log.d("Activity Lifecycle","onStart invoked");
}
@Override
protected void onResume() {
super.onResume();
Log.d("Activity Lifecycle","onResume invoked");
}
@Override
protected void onPause() {
super.onPause();
Log.d("Activity Lifecycle","onPause invoked");
}
@Override
protected void onStop() {
super.onStop();
Log.d("Activity Lifecycle","onStop invoked");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("Activity Lifecycle","onRestart invoked");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Activity Lifecycle","onDestroy invoked");
}
}
In our application we can have more than one activity file and we need to declare all the
activities in the AndroidManifest.xml file. In the manifest XML file, by using MAIN action
and LAUNCHER category attributes in intent filters (<intent-filter>) we can mention the
main activity that opens when the user initially launches our app with the launcher icon. In case
if we didn’t mention the MAIN action, then the system will decide which activity needs to start
and if we didn’t add the LAUNCHER category for the main activity, our app icon will not
appear in the home screen’s list of apps.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
If you observe log messages in LogCat window onCreate, onStart and onResume methods
are invoked by system.
Now click on Home button in Android Emulator, immediately activity entered into Paused
state and system will invoke onPause() method like as shown below.
After a while, the activity will enter into Stopped state and system will invoke onStop()
method like as shown below.
Now again launch our app from the Home screen list of apps like as shown below.
If you observe log messages in the LogCat window again onRestart, onStart and onResume
methods are invoked by system like as shown below.
Now click on Back button in the android emulator, the system will invoke the onPause method
and after a while onStop, onDestroy methods will be invoked like as shown below.
Here we need to remember that onCreate and onDestroy methods will invoke only once
throughout the activity life cycle.
This is how android activity life cycle process will invoke different methods while transition
from one stage to another stage.