Download Android Basics

Document related concepts
no text concepts found
Transcript
Android Application Development
DevFest event 2012
@Pear Continental, Karachi
Presenter: Imam Raza
Speaker.bio.toString()
•
•
•
•
Senior Software Architect @ Folio3.
Specialties: Enterprise Software Architecture,
Mobile Software Architecture, Software Best
Practices(TDD,CI ,AOP, IOC).
Master in computer science from KU
B.E (Mechanical) from NED University
Monday, September 19, 2011
Me.loveQuestions==true
Monday, September 19, 2011
‫و رفعنالک ذکرک‬
Monday, September 19, 2011
Agenda
•
•
•
•
•
•
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Agenda
•
•
•
•
•
•
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
SmartPhone Vs PC sales 2011
Category
Q4 2011
shipments
(millions)
Growth
Q4’11/Q4’10
Full year 2011
shipments
(millions)
Growth
2011/2010
Smart Phones
158.5
56.6%
487.7
62.7%
Total Client Pcs
120.2
16.3%
414.6
14.8%
-pads
26.5
186.2%
63.2
274.2%
-netbooks
6.7
-32.4%
29.4
-25.3%
-notebooks
57.9
7.3%
209.6
7.5%
-Desktops
29.1
-3.6%
112.4
2.3%
Market Share Q2 2012
Smart Phone
%percentage
Unit sold (millions)
Android
68.1%
104.8
iOS
16.9%
26
Black Berry
4.8%
7.4
Symbian
4.4%
6.8
Windows
3.5%
5.4
Agenda
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Android Apps
•
•
•
•
•
Myomo MyProgress
Sony Socom Android App
Bitzer
NSDroid (NetSuite CRM)
Hiplink
Myomo
Sony Socom App
BEAM(Bitzer Enterprise)
NSDroid(NetSuite CRM)
Hiplink
Agenda
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Android Stack
The Stack
Linux Kernel
•
Android runs on Linux. Linux
provides:
–
Hardware abstraction
layer
Memory
management
–
Process management
Networking
–
–
•
•
Users never see Linux sub
system
The adb shell command opens
Linux shell
Native Libraries
•
Pieces borrowed from other
open source projects:
Bionic, a super fast and
small license-friendly
libc library optimized
for Android
–
•
•
•
•
WebKit library for fast HTML
rendering
OpenGL for graphics
Media codecs offer support for
major audio/video codecs
SQLite database ..Much more…
Question: Difference between
Java VM and Dalvik VM?
Dalvik VM
•
•
Dalvik VM is Android implementation of Java VM
Dalvik is optimized for mobile devices:
–
–
•
Battery consumption
CPU capabilities
Key Dalvik differences:
–
–
–
–
Register-based versus stack-based VM
Dalvik runs .dex files
More efficient and compact implementation
Different set of Java libraries than JDK
Application Framework
•
•
•
The rich set of system services wrapped in an
intuitive Java API.
This ecosystem that developers can easily tap
into is what makes writing apps for Android easy.
Location, web, telephony, WiFi, Bluetooth,
notifications, media, camera, just to name a few.
Applications
Applications
Dalvik Executable +
Resources = APK
Must be signed (but
debug key is okay
for development)
Many markets with
different policies
•
•
•
Question: What is the
difference between Android
and Java?
Android and Java
Android Java
=
Java SE
–
AWT/Swing
+
Android API
Android SDK- what is in box?
SDK
Tools
Docs
Platforms
–
Data
–
Skins
–
Images
–
Samples
–
Google
Add-ons
Agenda
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Hello World-Create New
Project
Use the Eclipse tool to create a new Android
project.
Here are some key constructs:
Step-1
Step-2
Step-3
Step-4
Hello World-Anatomy of App
Java Code
+
XML / Other
Resources
+
Manifest File
=
Android App
HelloWorld-Manifest File
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.folio3"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloworldActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application></manifest>
HelloWorld- Layout Resource
File
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
HelloWorld-JAVA File
package com.folio3;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Agenda
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Main Building Blocks
•
•
•
•
•
•
Activities
Intents
Services
Content Providers
Broadcast Receivers
Fragments
Activities
An activity represents a screen
or windows
Activity LifeCycle
Activity have well-defined
lifecycle. The android OS
manages your activity by
changing its state.
You fill in the blanks
Intents
Intents represent
events or actions.
They are to Android
apps what hyperlinks
are to websites. Sort
of.
Intents can be
implicit or explicit.
•
•
•
Services
Services are code that runs in the background.
They can be started and stopped. Services
doesn’t have UI.
Service LifeCycle
•
•
Service also has a lifecycle,
but it’s much simpler than
activity’s.
An activity typically starts
and stops a service to do
some work for it in the
background, such as play
music, check for new
tweets, etc.
Content Provider
•
Content Providers share
content with applications
across application
boundaries.
•
Examples of built-in
Content Providers are:
Contacts,
MediaStore,
Settings and
more.
–
–
–
Broadcast Receivers
An Intent-based publish-subscribe mechanism.
Great for listening system events such as SMS
messages.
Fragments
A Fragment represents a behavior or a portion of
user interface in an Activity.
Fragments
• Fragments were introduced in Android 3.0 (API
level 11), primarily to support more dynamic and
flexible UI designs on large screens, such as
tablets.
• Fragments are lot like an activity but it must
exists within the activity.
• DialogFragment makes it easy to show a Dialog
that is managed as part of the Activity lifecycle.
• ListFragment makes it easy to show a list of data.
Monday, September 19, 2011
Monday, September 19, 2011
Agenda
Market Statistics
The Android Work in Pakistan
Android Basics
Hello World
Main Building Blocks
Android Best Practices
Best Practices
•
•
•
•
•
Use RoboGuice(DI based framework)
Learn Activity Life Cycle
Avoid getting activities thick
Design views for multiple size/orientation.
Use Fragments to better manage sub-portion of
Activity.
• Practice Good MVC.
• Use Source Code Analyzer Tools (findbugs,
checkstyle,PMD and CPD). Integrate these tools
with CI Tools like Teamcity.
Monday, September 19, 2011
RoboGuice
• It’s based on dependency injection pattern just
like Spring Framework in enterprise apps
• It takes the guesswork out of development. e.g
checking null for getIntent().getExtras(). Casting
findViewById().
• Make your writing unit test case easy
• It reduces your lines of code and hence the
number of bugs see next slide for code.
Monday, September 19, 2011
class AndroidWay extends Activity {
TextView name;
ImageView thumbnail;
LocationManager loc;
Drawable icon;
String myName;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name = (TextView) findViewById(R.id.name);
thumbnail = (ImageView) findViewById(R.id.thumbnail);
loc = (LocationManager)
getSystemService(Activity.LOCATION_SERVICE);
icon = getResources().getDrawable(R.drawable.icon);
myName = getString(R.string.app_name);
name.setText( "Hello, " + myName );
}
}
Monday, September 19, 2011
class RoboWay extends RoboActivity {
@InjectView(R.id.name)
TextView name;
@InjectView(R.id.thumbnail)
ImageView thumbnail;
@InjectResource(R.drawable.icon) Drawable icon;
@InjectResource(R.string.app_name) String myName;
@Inject
LocationManager loc;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name.setText( "Hello, " + myName );
}
}
Monday, September 19, 2011
Compatibility
• Ability to install and run app on device.
• Huge variety of devices so developer need to
make sure about the Hardware/Software feature
his application needed to run.
Monday, September 19, 2011
Compatibility
• Specify uses-feature node for every API you use
• Mark essential features as required.
• Mark optional features as not required.
<uses-feature
Android:name=“android.hardware.gps”
Android:required=“true”/>
Monday, September 19, 2011
Compatibility
• Check for API existence in code.
PackageManager pm = getPackageManager();
Boolean hasCompass=
pm.hasSystemFeature(
PackageManager.FEATURE_SENSOR_COMPASS);
If(hasCompass){
//enable things are needed
}
Monday, September 19, 2011
Compatibility
Use dp and sp instead of px:
<Button android:layout_width=“wrap_content”
Android:layout_height=“wrap_content”
Android:layout_marginTop=“20dp”/>
<TextView android:layout_width=“match_parent”
Android:layout_height=“wrap_content”
Android:textsize=“20sp”/>
Monday, September 19, 2011
Compatibility
Monday, September 19, 2011
Advance Task Killer App is
among 50 millions or more
install apps
Why?
Monday, September 19, 2011
Performance
•
•
•
•
Avoid creating objects. (e.g use StringBuffer) .
Prefer static over virtual.
Use static final for constants.
Avoid internal getter/Setter (with Proguard you
don’t need it.)
• Use Enhanced For Loop Syntax e.g:
for (Foo a : mArray) { sum += a.mSplat; }
• Use native methods.
• Avoid using Float and enums
Responsiveness
Monday, September 19, 2011
Responsiveness
• “Application Not Responding”
•
•
Respond to user within 5 seconds
Broadcast Receiver must complete within 10 seconds
• Use Threads and AsyncTasks within Services
Monday, September 19, 2011
Source Code Analyzer Tools
•
•
•
•
•
FindBugs
PMD
CheckStyle
CPD : Shows code duplication
You can integrate them with CI Server like
Teamcity to get consolidated reports of code
quality of your team. We have been using it on
our company and its really helped us in
monitoring quality of code.
Monday, September 19, 2011
Monday, September 19, 2011
Questions