SlideShare a Scribd company logo
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      Growth        Full year 2011   Growth
                   shipments    Q4’11/Q4’10   shipments        2011/2010
                   (millions)                 (millions)
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
Google Developer Group(GDG) DevFest Event 2012 Android talk
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
Add-ons
          –   Google
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
Compatibility-Test for different
device/screen size




 Monday, September 19, 2011
Compatibility-Test for different
device/screen size




 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

More Related Content

PPTX
Polymer and web component
PPTX
How to build a web application with Polymer
PDF
Building a Secure App with Google Polymer and Java / Spring
PPTX
Google Polymer Introduction
PDF
Introduction to Web Components
PDF
Custom Elements with Polymer Web Components #econfpsu16
PDF
Polymer
PPTX
Web Components
Polymer and web component
How to build a web application with Polymer
Building a Secure App with Google Polymer and Java / Spring
Google Polymer Introduction
Introduction to Web Components
Custom Elements with Polymer Web Components #econfpsu16
Polymer
Web Components

What's hot (20)

PDF
Booting up with polymer
PDF
Booting up with polymer
PDF
Build Reusable Web Components using HTML5 Web cComponents
PDF
Polymer - Welcome to the Future @ PyGrunn 08/07/2014
PDF
Polymer vs other libraries (Devfest Ukraine 2015)
PPTX
Polymer / WebComponents
PDF
Web Components
PDF
Introduction to Web Components
PDF
Web Components Everywhere
PDF
Google Polymer Framework
PDF
Polymer, A Web Component Polyfill Library
PPTX
Polymer
PPTX
Polymer presentation in Google HQ
PDF
Web Components + Backbone: a Game-Changing Combination
PDF
Levent-Gurses' Introduction to Web Components & Polymer
PDF
Introduction to polymer project
PDF
Web components
PDF
Web Components with Polymer (extra Polymer 2.0)
PDF
A brave new web - A talk about Web Components
PPTX
Web Components
Booting up with polymer
Booting up with polymer
Build Reusable Web Components using HTML5 Web cComponents
Polymer - Welcome to the Future @ PyGrunn 08/07/2014
Polymer vs other libraries (Devfest Ukraine 2015)
Polymer / WebComponents
Web Components
Introduction to Web Components
Web Components Everywhere
Google Polymer Framework
Polymer, A Web Component Polyfill Library
Polymer
Polymer presentation in Google HQ
Web Components + Backbone: a Game-Changing Combination
Levent-Gurses' Introduction to Web Components & Polymer
Introduction to polymer project
Web components
Web Components with Polymer (extra Polymer 2.0)
A brave new web - A talk about Web Components
Web Components
Ad

Viewers also liked (20)

PDF
Microservices y la era Post Industrial de la Web
PPT
Reaching for the Future with Web Components and Polymer
PPT
Android presentation
PDF
Web components the future is here
PPTX
GDG Devfest 2016 session on Android N
PPTX
Apple WWDC 2014 highlights
PPTX
O'Reilly Fluent, Web Components Enterprise
PPTX
Material design
PDF
Big Data University ML0101EN Certificate _ Big Data University
PDF
HTML5 Web Components
PDF
IT consultancy presentation
PPSX
Information and communication technology consultancy
PDF
Audio technik Profile
PDF
Cygnet Consultancy Power Point
PDF
Audio video technology consultancy services
PPSX
Introductions and Protfolio
PPTX
Globalizing Music-Audio Sales - NAMM 2015 H.O.T. Zone Presentation by Marek M...
PPTX
MBaaS (Mobile Backend As a Service)
PDF
AudioTechnik
PPTX
Consultancy project ricardo siller execution
Microservices y la era Post Industrial de la Web
Reaching for the Future with Web Components and Polymer
Android presentation
Web components the future is here
GDG Devfest 2016 session on Android N
Apple WWDC 2014 highlights
O'Reilly Fluent, Web Components Enterprise
Material design
Big Data University ML0101EN Certificate _ Big Data University
HTML5 Web Components
IT consultancy presentation
Information and communication technology consultancy
Audio technik Profile
Cygnet Consultancy Power Point
Audio video technology consultancy services
Introductions and Protfolio
Globalizing Music-Audio Sales - NAMM 2015 H.O.T. Zone Presentation by Marek M...
MBaaS (Mobile Backend As a Service)
AudioTechnik
Consultancy project ricardo siller execution
Ad

Similar to Google Developer Group(GDG) DevFest Event 2012 Android talk (20)

PDF
Android Development...The 20,000-Foot View
PDF
Introduction to Android by Demian Neidetcher
PPSX
Android Introduction
PDF
Getting Started with Android - OSSPAC 2009
PPTX
Basic of Android App Development
PDF
Domo Arigato Mr. Roboto - Open Source Bridge 2009
PDF
Android Workshop Presentation
PDF
Android development - the basics, MFF UK, 2012
PPTX
All about android
PDF
Androidoscon20080721 1216843094441821-9
PDF
Androidoscon20080721 1216843094441821-9
PDF
Slides bootcamp21
PDF
Google Android @ AlphaCSP's JavaEdge
KEY
Android Development: The Basics
PPTX
Introduction To android
PDF
Android : Revolutionizing Mobile Devices
PDF
Android development - the basics, MFF UK, 2014
PDF
Mobile app
PPTX
Android quick talk
PPTX
Android- Introduction for Beginners
Android Development...The 20,000-Foot View
Introduction to Android by Demian Neidetcher
Android Introduction
Getting Started with Android - OSSPAC 2009
Basic of Android App Development
Domo Arigato Mr. Roboto - Open Source Bridge 2009
Android Workshop Presentation
Android development - the basics, MFF UK, 2012
All about android
Androidoscon20080721 1216843094441821-9
Androidoscon20080721 1216843094441821-9
Slides bootcamp21
Google Android @ AlphaCSP's JavaEdge
Android Development: The Basics
Introduction To android
Android : Revolutionizing Mobile Devices
Android development - the basics, MFF UK, 2014
Mobile app
Android quick talk
Android- Introduction for Beginners

Recently uploaded (20)

PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation theory and applications.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
A Presentation on Artificial Intelligence
PDF
Electronic commerce courselecture one. Pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
The AUB Centre for AI in Media Proposal.docx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation_ Review paper, used for researhc scholars
Unlocking AI with Model Context Protocol (MCP)
Network Security Unit 5.pdf for BCA BBA.
A Presentation on Artificial Intelligence
Electronic commerce courselecture one. Pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Spectral efficient network and resource selection model in 5G networks
Advanced methodologies resolving dimensionality complications for autism neur...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Machine learning based COVID-19 study performance prediction
Chapter 3 Spatial Domain Image Processing.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Bridging biosciences and deep learning for revolutionary discoveries: a compr...

Google Developer Group(GDG) DevFest Event 2012 Android talk

  • 1. Android Application Development DevFest event 2012 @Pear Continental, Karachi Presenter: Imam Raza
  • 2. 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
  • 5. Agenda • Market Statistics • The Android Work in Pakistan • Android Basics • Hello World • Main Building Blocks • Android Best Practices
  • 6. Agenda • Market Statistics • The Android Work in Pakistan • Android Basics • Hello World • Main Building Blocks • Android Best Practices
  • 7. SmartPhone Vs PC sales 2011 Category Q4 2011 Growth Full year 2011 Growth shipments Q4’11/Q4’10 shipments 2011/2010 (millions) (millions) 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%
  • 8. 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
  • 9. Agenda Market Statistics The Android Work in Pakistan Android Basics Hello World Main Building Blocks Android Best Practices
  • 10. Android Apps • Myomo MyProgress • Sony Socom Android App • Bitzer • NSDroid (NetSuite CRM) • Hiplink
  • 11. Myomo
  • 17. Agenda Market Statistics The Android Work in Pakistan Android Basics Hello World Main Building Blocks Android Best Practices
  • 20. 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
  • 21. 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…
  • 23. 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
  • 24. 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.
  • 26. Applications • Dalvik Executable + Resources = APK • Must be signed (but debug key is okay for development) • Many markets with different policies
  • 27. Question: What is the difference between Android and Java?
  • 28. Android and Java Android Java = Java SE – AWT/Swing + Android API
  • 29. Android SDK- what is in box? SDK Tools Docs Platforms – Data – Skins – Images – Samples Add-ons – Google
  • 30. Agenda Market Statistics The Android Work in Pakistan Android Basics Hello World Main Building Blocks Android Best Practices
  • 31. Hello World-Create New Project Use the Eclipse tool to create a new Android project. Here are some key constructs:
  • 36. Hello World-Anatomy of App Java Code + XML / Other Resources + Manifest File = Android App
  • 37. 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>
  • 38. 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>
  • 39. 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); } }
  • 40. Agenda Market Statistics The Android Work in Pakistan Android Basics Hello World Main Building Blocks Android Best Practices
  • 41. Main Building Blocks • Activities • Intents • Services • Content Providers • Broadcast Receivers • Fragments
  • 42. Activities An activity represents a screen or windows
  • 43. Activity LifeCycle Activity have well-defined lifecycle. The android OS manages your activity by changing its state. You fill in the blanks
  • 44. Intents • Intents represent events or actions. • They are to Android apps what hyperlinks are to websites. Sort of. • Intents can be implicit or explicit.
  • 45. Services Services are code that runs in the background. They can be started and stopped. Services doesn’t have UI.
  • 46. 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.
  • 47. Content Provider • Content Providers share content with applications across application boundaries. • Examples of built-in Content Providers are: – Contacts, – MediaStore, – Settings and more.
  • 48. Broadcast Receivers An Intent-based publish-subscribe mechanism. Great for listening system events such as SMS messages.
  • 49. Fragments A Fragment represents a behavior or a portion of user interface in an Activity.
  • 50. 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
  • 52. Agenda Market Statistics The Android Work in Pakistan Android Basics Hello World Main Building Blocks Android Best Practices
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 59. 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
  • 60. 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
  • 62. Compatibility-Test for different device/screen size Monday, September 19, 2011
  • 63. Compatibility-Test for different device/screen size Monday, September 19, 2011
  • 64. Advance Task Killer App is among 50 millions or more install apps Why? Monday, September 19, 2011
  • 65. 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
  • 67. 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
  • 68. 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

Editor's Notes

  • #5: -First I would like to thank the organizers of the event that they allow me to put this slide as right of freedom of speech of every individual.-I condemn blasphemy act made recently by individuals and organizations in the name of freedom of speech that hurt millions of humans. So I would like to record my statement of condemnation to all those individual and organization who involved in this. And I would say to one sentence to them “Shame on you. Shame on you Google. Shame on you Facebook. Shame on you all on this wicked act”.-After recording my condemnation I would like to address you as your Muslim brother that lets we all start attaching ourselves with the only great personality ever sent to human kind. I would like share some Iqbal thoughts on the importance for Muslims to attached themselves with our Prophet Rasool Allah Sallahwasallam.SurahAle-Imran chapter#3,verse 64Allah did confer a great favour on the believers when He sent among them an apostle from among themselves, rehearsing unto them the Signs of Allah, sanctifying them, and instructing them in Scripture and Wisdom, while, before that, they had been in manifest error.
  • #54: Compatibitltyhttp://developer.android.com/guide/practices/compatibility.htmlSupporting Multiple Screens- http://developer.android.com/guide/practices/screens_support.html
  • #55: Compatibitltyhttp://developer.android.com/guide/practices/compatibility.htmlSupporting Multiple Screens- http://developer.android.com/guide/practices/screens_support.html
  • #66: http://developer.android.com/training/articles/perf-tips.html