Android Interview Questions

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Android Interview Questions

• What is Application?

o The Application class in Android is the base class within an Android app
that contains all other components such as activities and services. The
Application class, or any subclass of the Application class, is instantiated
before any other class when the process for your application/package is
created.

• What is Context?

o A Context is a handle to the system; it provides services like resolving


resources, obtaining access to databases and preferences, and so on. An
Android app has activities. Context is like a handle to the environment
your application is currently running in.
Application Context: This context is tied to the lifecycle of an application.
The application context can be used where you need a context whose
lifecycle is separate from the current context or when you are passing a
context beyond the scope of an activity.
Activity Context: This context is available in an activity. This context is
tied to the lifecycle of an activity. The activity context should be used when
you are passing the context in the scope of an activity or you need the
context whose lifecycle is attached to the current context.

• What is ABI Management?

o Different Android handsets use different CPUs, which in turn support


different instruction sets. Each combination of CPU and instruction sets
has its own Application Binary Interface, or ABI. The ABI defines, with great
precision, how an application's machine code is supposed to interact with
the system at runtime. You must specify an ABI for each CPU architecture
you want your app to work with. You can checkout the full
specifcations here

• Why bytecode cannot be run in Android?

o Android uses DVM (Dalvik Virtual Machine ) rather using JVM(Java Virtual
Machine).

• What is a BuildType in Gradle? And what can you use it for?


o Build types define properties that Gradle uses when building and
packaging your Android app.
o A build type defines how a module is built, for example whether ProGuard
is run.
o A product flavor defines what is built, such as which resources are included
in the build.
o Gradle creates a build variant for every possible combination of your
project’s product flavors and build types.

• Explain the build process in Android:

o First step involves compiling the resources folder (/res) using the aapt
(android asset packaging tool) tool. These are compiled to a single class
file called R.java. This is a class that just contains constants.
o Second step involves the java source code being compiled to .class files by
javac, and then the class files are converted to Dalvik bytecode by the "dx"
tool, which is included in the sdk 'tools'. The output is classes.dex.
o The final step involves the android apkbuilder which takes all the input and
builds the apk (android packaging key) file.

• What is the Android Application Architecture?

o Android application architecture has the following components:


a. Activities - Provides the window in which the app draws its UI
b. Services − It will perform background functionalities
c. Intent − It will perform the inter connection between activities and the
data passing mechanism
d. Resource Externalization − strings and graphics
e. Notification − light,sound,icon,notification,dialog box,and toast
f. Content Providers − It will share the data between applications

• What is Manifest file and R.java file in Android?

o Manifest: Every application must have an AndroidManifest.xml file (with


precisely that name) in its root directory. The manifest presents essential
information about the application to the Android system, information the
system must have before it can run any of the application's code. It
contains information of your package, including components of the
application such as activities, services, broadcast receivers, content
providers etc.
o R.Java: It is an auto-generated file by aapt (Android Asset Packaging Tool)
that contains resource IDs for all the resources of res/ directory.

• Describe activities

o Activities are basically containers or windows to the user interface.

• Lifecycle of an Activity

o OnCreate(): This is when the view is first created. This is normally where we
create views, get data from bundles etc.
o OnStart(): Called when the activity is becoming visible to the user.
Followed by onResume() if the activity comes to the foreground, or
onStop() if it becomes hidden.
o OnResume(): Called when the activity will start interacting with the user. At
this point your activity is at the top of the activity stack, with user input
going to it.
o OnPause(): Called as part of the activity lifecycle when an activity is going
into the background, but has not (yet) been killed.
o OnStop(): Called when you are no longer visible to the user.
o OnDestroy(): Called when the activity is finishing
o OnRestart(): Called after your activity has been stopped, prior to it being
started again

• What’s the difference between onCreate() and onStart()?

o The onCreate() method is called once during the Activity lifecycle, either
when the application starts, or when the Activity has been destroyed and
then recreated, for example during a configuration change.
o The onStart() method is called whenever the Activity becomes visible to
the user, typically after onCreate() or onRestart().

• Scenario in which only onDestroy is called for an activity without onPause()


and onStop()?

o If finish() is called in the OnCreate method of an activity, the system will


invoke onDestroy() method directly.

• Why would you do the setContentView() in onCreate() of Activity class?

o As onCreate() of an Activity is called only once, this is the point where


most initialization should go. It is inefficient to set the content in
onResume() or onStart() (which are called multiple times) as the
setContentView() is a heavy operation.

• onSavedInstanceState() and onRestoreInstanceState() in activity?

o OnRestoreInstanceState() - When activity is recreated after it was


previously destroyed, we can recover the saved state from the Bundle that
the system passes to the activity. Both
the onCreate() and onRestoreInstanceState() callback methods receive the
same Bundle that contains the instance state information. But because
the onCreate() method is called whether the system is creating a new
instance of your activity or recreating a previous one, you must check
whether the state Bundle is null before you attempt to read it. If it is null,
then the system is creating a new instance of the activity, instead of
restoring a previous one that was destroyed.
o onSaveInstanceState() - is a method used to store data before pausing the
activity.

• Launch modes in Android?

o Standard: It creates a new instance of an activity in the task from which it


was started. Multiple instances of the activity can be created and multiple
instances can be added to the same or different tasks.
▪ Example: Suppose there is an activity stack of A -> B -> C. Now if
we launch B again with the launch mode as “standard”, the new
stack will be A -> B -> C -> B.
o SingleTop: It is the same as the standard, except if there is a previous
instance of the activity that exists in the top of the stack, then it will not
create a new instance but rather send the intent to the existing instance of
the activity.
▪ Example: Suppose there is an activity stack of A -> B. Now if we
launch C with the launch mode as “singleTop”, the new stack will be
A -> B -> C as usual.
▪ Now if there is an activity stack of A -> B -> C. If we launch C again
with the launch mode as “singleTop”, the new stack will still be A ->
B -> C.
o SingleTask: A new task will always be created and a new instance will be
pushed to the task as the root one. So if the activity is already in the task,
the intent will be redirected to onNewIntent() else a new instance will be
created. At a time only one instance of activity will exist.
▪ Example: Suppose there is an activity stack of A -> B -> C -> D.
Now if we launch D with the launch mode as “singleTask”, the new
stack will be A -> B -> C -> D as usual.
▪ Now if there is an activity stack of A -> B -> C -> D. If we launch
activity B again with the launch mode as “singleTask”, the new
activity stack will be A -> B. Activities C and D will be destroyed.
o SingleInstance: Same as single task but the system does not launch any
activities in the same task as this activity. If new activities are launched,
they are done so in a separate task.
▪ Eg: Suppose there is an activity stack of A -> B -> C -> D. If we
launch activity B again with the launch mode as “singleTask”, the
new activity stack will be:
▪ Task1 — A -> B -> C and Task2 — D

• How does the activity respond when the user rotates the screen?

o When the screen is rotated, the current instance of activity is destroyed a


new instance of the Activity is created in the new orientation. The
onRestart() method is invoked first when a screen is rotated. The other
lifecycle methods get invoked in the similar flow as they were when the
activity was first created.

• How to prevent the data from reloading and resetting when the screen is
rotated?

o The most common approach these days would be to use a combination of


ViewModels and onSaveInstanceState(). So how we do we that?
o Basics of ViewModel: A ViewModel is LifeCycle-Aware. In other words, a
ViewModel will not be destroyed if its owner is destroyed for a
configuration change (e.g. rotation). The new instance of the owner will
just re-connected to the existing ViewModel. So if you rotate an Activity
three times, you have just created three different Activity instances, but
you only have one ViewModel.
o So the common practice is to store data in the ViewModel class (since it
persists data during configuration changes) and use OnSaveInstanceState
to store small amounts of UI data.
o For instance, let’s say we have a search screen and the user has entered a
query in the Edittext. This results in a list of items being displayed in the
RecyclerView. Now if the screen is rotated, the ideal way to prevent
resetting of data would be to store the list of search items in the
ViewModel and the query text user has entered in the
OnSaveInstanceState method of the activity.

• Mention two ways to clear the back stack of Activities when a new Activity
is called using intent

o The first approach is to use a FLAG_ACTIVITY_CLEAR_TOP flag. The second


way is by using FLAG_ACTIVITY_CLEAR_TASK and
FLAG_ACTIVITY_NEW_TASK in conjunction.

• What’s the difference between FLAG_ACTIVITY_CLEAR_TASK and


FLAG_ACTIVITY_CLEAR_TOP?

o FLAG_ACTIVITY_CLEAR_TASK is used to clear all the activities from the


task including any existing instances of the class invoked. The Activity
launched by intent becomes the new root of the otherwise empty task list.
This flag has to be used in conjunction with FLAG_ ACTIVITY_NEW_TASK.
o FLAG_ACTIVITY_CLEAR_TOP on the other hand, if set and if an old
instance of this Activity exists in the task list then barring that all the other
activities are removed and that old activity becomes the root of the task
list. Else if there’s no instance of that activity then a new instance of it is
made the root of the task list. Using FLAG_ACTIVITY_NEW_TASK in
conjunction is a good practice, though not necessary.

• Describe content providers

o A ContentProvider provides data from one application to another, when


requested. It manages access to a structured set of data. It provides
mechanisms for defining data security. ContentProvider is the standard
interface that connects data in one process with code running in another
process.
o When you want to access data in a ContentProvider, you must instead
use the ContentResolver object in your application’s Context to
communicate with the provider as a client. The provider object receives
data requests from clients, performs the requested action, and returns the
results.

• Access data using Content Provider:

o Start by making sure your Android application has the necessary read
access permissions. Then, get access to the ContentResolver object by
calling getContentResolver() on the Context object, and retrieving the data
by constructing a query using ContentResolver.query().
o The ContentResolver.query() method returns a Cursor, so you can retrieve
data from each column using Cursor methods.

• Describe services

o A Service is an application component that can perform long-running


operations in the background, and it doesn't provide a user interface. It
can run in the background, even when the user is not interacting with your
application. These are the three different types of services:
▪ Foreground Service: A foreground service performs some operation
that is noticeable to the user. For example, we can use a foreground
service to play an audio track. A Notification must be displayed to
the user.
▪ Background Service: A background service performs an operation
that isn’t directly noticed by the user. In Android API level 26 and
above, there are restrictions to using background services and it is
recommended to use WorkManager in these cases.
▪ Bound Service: A service is bound when an application component
binds to it by calling bindService(). A bound service offers a client-
server interface that allows components to interact with the service,
send requests, receive results. A bound service runs only as long as
another application component is bound to it.

• Difference between Service & Intent Service

o Service is the base class for Android services that can be extended to
create any service. A class that directly extends Service runs on the main
thread so it will block the UI (if there is one) and should therefore either be
used only for short tasks or should make use of other threads for longer
tasks.
o IntentService is a subclass of Service that handles asynchronous requests
(expressed as “Intents”) on demand. Clients send requests through
startService(Intent) calls. The service is started as needed, handles each
Intent in turn using a worker thread, and stops itself when it runs out of
wor

You might also like