Designing Beautiful Android Apps

Android UX/UI

Basic Steps

  1. Basic ERD
  2. Screen List
  3. Screen Relationship Diagram
  4. Group Screens in Screen Relationship Diagram
  5. Choose Navigation Patterns -> refine Screen Relationship Diagram
  6. Sketch Wireframes
  7. Digital Wireframes

Descendant Navigation

There is a clear hierarchy when navigating between screens.

Lateral Navigation

Is when you need to navigate between sibling screens. There are two types:

Collection Related Screens

Screens represent individual items in the collection represented by the parent

Vertically scrolling lists: Use for small amount of items; For collection-related screens, and especially for textual information,  are often the most straightforward and familiar kind of interface.

Gid Lists, horizontally scrolling lists (Carousels), Stacks (Cards): Used for more Visual or media-rich content items such as photos or videos. These UI elements are generally best used for presenting item collections or large sets of child screens (for example, a list of stories or a list of 10 or more news topics), rather than a small set of unrelated, sibling child screens.

Section Related Screens

Represent different sections of information about the parent. One section may show textual information about an object while another may provide a map of the object’s geographic location

Navigation patterns
Dashboard: is a grid of large, iconic buttons that constitutes the entirety, or most of, the parent screen.

Tabs: are most appropriate for small sets (4 or fewer) of section-related screens.

Horizontal paging: also referred to as swipe views list of categories (world, business, technology, and health stories). Like tabs, this pattern also allows grouping screens in that the parent presents the contents of child screens embedded within its own layout. Appropriate where there is some similarity in content type and when the number of siblings is relatively small

Android SEO / ASO Checklist

What your App Requires

You need to have an app that people want to come back to. This will keep your active device numbers as high as possible which is the key to continuous downloads. (Users find the most relevant, most popular apps at the top.)

Good looking / Well designed android app will get noticed by the Android Review team; which promotes apps for free on a weekly basis. So its important to work on the apps design!

Test Your App to avoid bad reviews, Use different Screen sizes and Android OS versions.

Make your package name seo friendly, for example for a princess painting app have: paint.coloring.princess

Use a High Quality Icon for your app; helps when people search for your app, they will be more likely to download it.

Google Play Admin

Cover image

This can really boost user downloads. Make it unique, and don’t use the same picture from the screenshot.

App Name

Putting your main keyword in your app title: refer to the keyword section in this article.

Include a relevant key search phrase to your app name (e.g., Unblock me: [Puzzle game]). Tip: Apps starting by a letter closest to ‘A’ may also get better display.

Try to get relevant keywords into this field. Obviously, sometimes this may not be practical, or it may look too awkward from a user perspective, so use your judgment. Also, do your research, if there’s a hundred apps called “Stop Watch App”, then you’ll want to differentiate your title somehow. Maybe it would be better to target a less competitive keyphrase like “Timer App”, even if you suspect it doesn’t carry quite as much search volume. Or at least differentiate by using a popular modifier like “Free”.

Publisher Name

The publisher field does has a big impact on search in the App Store and Google Play. In the case of Apple, it’s treated as strongly as the app title. So it’s worth pushing a relevant keyword into this field. It may even be worth creating different publisher names for the different types of apps that you develop. For instance, your ‘Stop Watch’ Apps could be published under “Time Dev” then you can rank for both ‘Stop Watch’ and ‘Timer’.

Include keywords associated with publisher name (e.g., Zynga: [Social Games Services]).

Youtube Video

This is a must for each app

Screenshots

  • HQ Screenshots
  • Use all available screenshots
  • Show your best screen shot first – users see your first screenshot in the search results
  • explanations on your screenshots

Localize Description

Should be localised in most common languages such as Chinese, Korean, Spanish, French and any other languages of your markets.

Category

When you publish an app in Google Play, you pick the category in which you want users to find your app. More than 30 categories are available. Inside each category, apps are ranked based on a combination of ratings, reviews, downloads, country, and other factors. Many popular categories also start with a collection of featured apps selected by the Google Play editorial staff.

Description

Don’t forget to talk about any permission your app is requesting upon installing. The user will see them anyway so it’s better to be honest from the start. List all your app’s features, while also being transparent about any monetization modals you have in place.

This is the place to target keywords and meta descriptions text.

Keywords

Put keywords in your app description (unlike on iOS, the body of the description is searched) and your promo text.

Make sure your app name is frequently used (for brand search) and repeat several times your main keywords (up to 5).

The Algorithm understands that if your app is about Dog Nutrition, it’s also going to talk about Dog food… achieving a level of Authority will bring tons of traffic for long tail keywords related to your topic/niche. The reason ? Google LSI algorithm

Remember A small increase in ranking can bring serious number of downloads, so dont get hung up on ranking high on difficult words.. read below.

Picking your Keywords

Method:

  1. Find all relevant keywords and there difficulty for your app (by looking at other apps, Adwords Keyword Tool)
  2. Method 1: Try Targeting the most relevant, see if you can list in top 10; if not, Target the second most relevant; and so on.
  3. Method 2: Try Targeting less difficult, relevant search terms first, then slowly try adding more difficult search terms
  4. Once you have found a relevant keyword you rank in the Top 10 for and look at its difficulty level. Now only target other relevant keywords with this difficulty level

Its important to track your keywords Prune your list and select new keywords that you can rank for. Your goal is to get your app in the top 10 for every one of your keywords. This is not always possible and being ranked #22 for a valuable keyword is still pretty good.

So throw out poorly ranked keywords and find another. You should also get rid of a keyword if it is not closely related to your app.

So how do you find/pick your keywords? Start with the most relevant, then filter by ranking difficulty.

  • 1 – Relevance: Be sure that your keywords are not only related, but are what people might search for when looking for an app like yours
  • 2 – Ranking difficulty: If you do not rank well for those keywords, then all that traffic is worthless. 
  • Start small and get a feel for the average Difficulty Score that will get your app into the top 10 for most of your keywords. 
  • For example, while examining your keyword rankings you might notice that the keywords that you are able to get ranked in the top 10 for have a Difficulty Score of about 3.2. This tells you that if you choose keywords that have a Difficulty Score of 3.2 or less, there will be a much better chance that you can get into the top 10 for those terms. As your app gets downloaded more, you will be able rank for more difficult (and higher traffic) keywords.
  • if relevance and difficulty are similar, then choose the keyword that has more traffic.

Go on the normal Adwords Keyword Tool and search for lateral keywords to use as well. Using lateral keywords (the ones suggested by Google after you’ve done your main search) will improve your app’s chance to get into the search results for those main keywords.

Also check what keywords your competition targets (start with the apps ranked in the 20’s/30’s which have alot of downloads) getting your keywords and phrases into this description field.

But again, avoid keyword stuffing, it’s not user-friendly and it may raise Google’s wrath! Experimenting with different combinations of keywords is a good way to figure out how to maximise your search ranking and downloads. Google Play’s relaxed submission rules allow you to easily update the title and keywords, resubmit the app to the store, and then monitor the effect on rankings.

Helpful tools for keyword generation: 

  • AppCod.es can predict what keywords your competitor apps are using and suggest optimum keywords for your app.
  • Google keyword tool
  • There are tools that use third party data to generate keyword volumes. Mobile Dev HQ is one of them. So it may be worth checking out
  • Check out Chomp, which release some metrics on app search queries through its store.

Target Your Keywords

Your description should contain certain keywords you’re targeting with your app. Say you have a camera app named “Funky Camera Tricks”. Use the word ‘camera’ 3-6 times in your app description, (while keeping it relevant) and also use the words ‘tricks’ and ‘funky’ a few times.

You want to create a Goldilocks description: not too much keyword usage, not too long or too short. Keep it balanced.

Using your keywords 5 times in your app description generally does the trick.

Ratings / Reviews

A Google Play / Android app with no constant flow of reviews will not survive… Google needs, feeds from those reviews to understand you are not just buying bulk downloads. Reviews matter… matter so much is a bit scary. Your app’s rating is one of the most important factors influencing its ranking in the various lists and search results in Google Play. It’s also one of the key signals that the editorial staff looks for, when curating apps and games for promotion in the store.

Social Media

  • Facebook connect
  • tweets,
  • google + inside your app.
  • Facebook fan pages

Other

The following should be done, but are not as important as the ones listed above.

PPC / Admob to generate downloads

Seek out relevant journalists and review sites before the release “We Google the most popular sites that are focused on reviewing mobile applications, and where our competitors have reviews.”

Going beyond the standard app review sites, look at the journalists discussing tools for the market you serve

cheap link building

Chomp is a popular app discovery search engine

Mobile specific agencies such as AppShout which can help you contact a massive number of blogs and publications.

You can link web users directly to your product details page from outside Google Play, such as from your web site, an ad campaign, reviews, social media posts, and more. See Linking to Your Products to find out how

links don’t really bring permanent ranking, but more of a flow and momentum (see the wave in the graph). Although my research still in baby steps I don’t believe all links count in Google Play and more “passive” or “soft” link building could work better than conventional SEO/Website link building.

Offer your app for free or at half price for a period of time

Google Play Search Algorithm

  • Number of ratings: how many people have rated and reviewed your app.
  • Ratings: how high (or low) they are
  • Amount of downloads: how many app downloads
  • Downloads growth: the growth of downloads over the last 30 days
  • Uninstalls: how many people uninstall the app
  • Usage: frequency with which your app is used (reported by some developers)
  • Update 2/9/12: Links to Play Store page“Getting people to write about your app improves your search rankings in the Play Store” (Google I/O June 2012)

Android App SEO – Increase App downloads

General Tips

Social

  • Mobile specific agencies such as AppShout which can help you contact a massive number of blogs and publications.
  • Ask for feedback and get reviews on websites, blogs, forums.
  • You can link web users directly to your product details page from outside Google Play, such as from your web site, an ad campaign, reviews, social media posts, and more. See Linking to Your Products to find out how
  • Social media: Facebook connect, tweets, google + inside your app.
  •  links don’t really bring permanent ranking, but more of a flow and momentum (see the wave in the graph). Although my research still in baby steps I don’t believe all links count in Google Play and more “passive” or “soft” link building could work better than conventional SEO/Website link building.

Blogs

Promotions

  • Offer your app for free or at half price for a period of time
  • Cover image can really boost user downloads. Make it unique, and don’t use the same picture from the screenshot.

General

  • Keep your active device numbers as high as possible. That’s the key to continuous downloads.
  • Users find the most relevant, most popular apps at the top.
  • enter your product details in the languages of your markets.
  • Test Your App to avoid bad reviews: Screen size,  Android OS version matter
  • Getting (good) reviews
  • description should be localized in most common languages such as Chinese, Korean, Spanish or French
  • The Algorithm understand that if your app is about Dog Nutrition, it’s also going to talk about Dog food… achieving a level of Authority will bring tons of traffic for long tail keywords related to your topic/niche. The reason ? Googe LSI algorithm
  • a small increase in ranking can bring serious number of downloads.
  •  cheap link building 

Category

When you publish an app in Google Play, you pick the category in which you want users to find your app. More than 30 categories are available. Inside each category, apps are ranked based on a combination of ratings, reviews, downloads, country, and other factors. Many popular categories also start with a collection of featured apps selected by the Google Play editorial staff.

App / Publisher Name

  • Include a relevant key search phrase to your app name (e.g., Unblock me: [Puzzle game]). Tip: Apps starting by a letter closest to ‘A’ may also get better display.
  • App Publisher: Include keywords associated with publisher name (e.g., Zynga: [Social Games Services]).
  • Package names matter: paint.coloring.princess
  • Chomp is a popular app discovery search engine
  • Putting your main keyword in your app title
  •  try to get relevant keywords into this field. Obviously, sometimes this may not be practical, or it may look too awkward from a user perspective, so use your judgment. Also, do your research, if there’s a hundred apps called “Stop Watch App”, then you’ll want to differentiate your title somehow. Maybe it would be better to target a less competitive keyphrase like “Timer App”, even if you suspect it doesn’t carry quite as much search volume. Or at least differentiate by using a popular modifier like “Free”.
  • the publisher field does has a big impact on search in the App Store and Google Play. In the case of Apple, it’s treated as strongly as the app title. So it’s worth pushing a relevant keyword into this field. It may even be worth creating different publisher names for the different types of apps that you develop. For instance, your ‘Stop Watch’ Apps could be published under “Time Dev” then you can rank for both ‘Stop Watch’ and ‘Timer’.
  • Put keywords in your app description (unlike on iOS, the body of the description is searched) and your promo text. Make sure your app name is frequently used (for brand search) and repeat several times your main keywords (up to 5). – See more at: http://appclover.com/how-to-market-your-app-on-the-google-play-store/#sthash.5Zzsh6f6.dpuf

Good quality graphics

  1. HQ Icons
  2. Youtube video
  3. HQ Screenshots
  4. Use all available screenshots
  5. Show your best screen shot first – users see your first screenshot in the search results
  6. explanations on your screenshots

Ratings / Reviews

  • A Google Play / Android app with no constant flow of reviews will not survive… Google needs, feeds from those reviews to understand you are not just buying bulk downloads. Reviews matter… matter so much is a bit scary.
  • Your app’s rating is one of the most important factors influencing its ranking in the various lists and search results in Google Play. It’s also one of the key signals that the editorial staff looks for, when curating apps and games for promotion in the store.
  • seek out relevant journalists and review sites before the release “We Google the most popular sites that are focused on reviewing mobile applications, and where our competitors have reviews.”
  • Going beyond the standard app review sites, look at the journalists discussing tools for the market you serve
  • Admob; facebook fan pages; Twitter
  • Android app discovery platforms such as Appolicious
  • ensuring that an app’s user base is actively providing reviews is scripts like Appirater, which automatically prompts the user with a message asking for a review.

App Description

Don’t forget to talk about any permission your app is requesting upon installing. The user will see them anyway so it’s better to be honest from the start. List all your app’s features, while also being transparent about any monetization modals you have in place.

This is the place to target keywords.

meta descriptions text,

Picking your Keywords

General rules:

  1. Try ranking high for less difficult search terms
  2. Slowly try adding more difficult search terms
  3. Putting your main keyword in your app title

Its important to track your keywords

Prune your list and select new keywords that you can rank for.

Your goal is to get your app in the top 10 for every one of your keywords. This is not always possible and being ranked #22 for a valuable keyword is still pretty good.

Throw out that keyword and find another. You should also get rid of a keyword if it is not closely related to your app.

hierarchy of keyword selection criteria.

  • 1 – Relevance: Be sure that your keywords are not only related, but are what people might search for when looking for an app like yours
  • 2 – Ranking difficulty: If you do not rank well for those keywords, then all that traffic is worthless. 
  • Start small and get a feel for the average Difficulty Score that will get your app into the top 10 for most of your keywords. 
  • For example, while examining your keyword rankings you might notice that the keywords that you are able to get ranked in the top 10 for have a Difficulty Score of about 3.2. This tells you that if you choose keywords that have a Difficulty Score of 3.2 or less, there will be a much better chance that you can get into the top 10 for those terms. As your app gets downloaded more, you will be able rank for more difficult (and higher traffic) keywords.
  • if relevance and difficulty are similar, then choose the keyword that has more traffic.

Go on the normal Adwords Keyword Tool and search for lateral keywords to use as well. Using lateral keywords (the ones suggested by Google after you’ve done your main search) will improve your app’s chance to get into the search results for those main keywords.

Also check what keywords your competition targets (start with the apps ranked in the 20’s/30’s which have alot of downloads)

getting your keywords and phrases into this description field. But again, avoid keyword stuffing, it’s not user-friendly and it may raise Google’s wrath!

Experimenting with different combinations of keywords is a good way to figure out how to maximise your search ranking and downloads. Google Play’s relaxed submission rules allow you to easily update the title and keywords, resubmit the app to the store, and then monitor the effect on rankings.

Helpful tools for keyword generation: 

  • AppCod.es can predict what keywords your competitor apps are using and suggest optimum keywords for your app.
  • Google keyword tool
  • There are tools that use third party data to generate keyword volumes. Mobile Dev HQ is one of them. So it may be worth checking out
  • Check out Chomp, which release some metrics on app search queries through its store.

Target Your Keywords

Your description should contain certain keywords you’re targeting with your app. Say you have a camera app named “Funky Camera Tricks”. Use the word ‘camera’ 3-6 times in your app description, (while keeping it relevant) and also use the words ‘tricks’ and ‘funky’ a few times.

You want to create a Goldilocks description: not too much keyword usage, not too long or too short. Keep it balanced.

Using your keywords 5 times in your app description

Google Play Search Algorithm

  • Number of ratings: how many people have rated and reviewed your app.
  • Ratings: how high (or low) they are
  • Amount of downloads: how many app downloads
  • Downloads growth: the growth of downloads over the last 30 days
  • Uninstalls: how many people uninstall the app
  • Usage: frequency with which your app is used (reported by some developers)
  • Update 2/9/12: Links to Play Store page“Getting people to write about your app improves your search rankings in the Play Store” (Google I/O June 2012)

How to add Admob into an Android App

How to add Admob into an Android App

Link: https://developers.google.com/mobile-ads-sdk/docs/

1. Download and Add google play services to your project: https://developer.android.com/google/play-services/setup.html

* Add the following line to your build.grade:

compile 'com.google.android.gms:play-services:4.3.23'

* Add the following line to your manifest file (inside application element)

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version"/>

* Add the following to your manifest file

<activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2. Create your new app in Admob

3. Create all your adunits (Banners or Interstitial)

Banners

Add banner to your xml layout by

<com.google.android.gms.ads.AdView
android:id=”@+id/adView”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
ads:adUnitId=”ADUNITID”
ads:adSize=”SMART_BANNER” />

Load your ad when the activity starts

// banner ad

// inside onCreate in your activity
AdView bannerAdView = (AdView)this.findViewById(R.id.adView);
if (Settings.SHOW_ADS) {
AdRequest adRequest = new AdRequest.Builder().build();
bannerAdView.loadAd(adRequest);
} else {
bannerAdView.setVisibility(View.GONE);
}

// interstitial ad

private InterstitialAd interstitial; // instance variable for your activity

// inside onCreate in your activity

// interstitial ad
if (Settings.SHOW_ADS && !Settings.SHOWN_INTERSTITIAL_AD) {
Settings.SHOWN_INTERSTITIAL_AD = true;
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(“ca-app-pub-9811143400912143/4907218517”);
AdRequest adRequestFullScreen = new AdRequest.Builder().build();
interstitial.loadAd(adRequestFullScreen);
interstitial.setAdListener(new AdListener(){
public void onAdLoaded(){
displayInterstitial();
}
});
}

public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
}

 

Using Google Analytics in Android

Google Analytics in Android

Link: https://developers.google.com/mobile-ads-sdk/docs/

1. install google play services

2. Setup one Google Analytics property and app view (profile)

3. Add to manifest

<uses-permissionandroid:name="android.permission.INTERNET"/>
    <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

4. Create Custom “application” class (dont forget to add the ‘name’ in application element of the manifest file)<application
android:name=””>

public class MemoryApplication extends Application {

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

public static final String GA_PROPERTY_ID = “ID”;

synchronized Tracker getTracker(TrackerName trackerId) {
if (!mTrackers.containsKey(trackerId)) {

GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(GA_PROPERTY_ID)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? null
: null;
mTrackers.put(trackerId, t);

}
return mTrackers.get(trackerId);
}
}

5. Create enum class

public enum TrackerName {
APP_TRACKER, // Tracker used only in this app.
GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

6. each activities onResume method write the following code:

// GA Tracker
Tracker t = ((MemoryApplication) getApplication()).getTracker(TrackerName.APP_TRACKER);
t.setScreenName(“Game Screen”);
t.send(new HitBuilders.AppViewBuilder().build());

 

 

 

Mercurial Basics

Basic Mercurial Commands

Mercurial (just like Git) is a distributed revision control system; Distributed revision control takes a peer-to-peer approach to version control, as opposed to the client-server approach of centralized systems. Rather than a single, central repository on which clients synchronize, each peer’s working copy of the codebase is a complete repository

Looking for a lot more detail? This guy does a great job at explaining Mercurial and distributed revision control: http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/

Quick Start

Clone a project and push changes

$ hg clone http://selenic.com/repo/hello
$ cd hello
$ (edit files)
$ hg add (new files)
$ hg commit -m 'My changes'
$ hg push

 Create a project and commit

$ hg init (project-directory)
$ cd (project-directory)
$ (add some files)
$ hg add
$ hg commit -m 'Initial commit'

Explanation

Initialize Hg Project

# Cloning a new project
$ hg clone <Remote Path for repo> <Local Path for repo>
eg. hg clone http://selenic.com/hg/ .

Review Code Before Committing

$ hg status         # show all non-ignored files
$ hg diff -s        # all changes your about to commit
$ hg revert y2      # Restores the local copy to the default tip state
$ hg log            # change set

Commit and Push code to server

$ hg pull -u        # get latest changes and update repo
$ hg add            # add 'unknown' files 
$ hg commit         # commit all changes into new changeset, edit changelog entry 
$ hg push           # send changeset to server

Working with branches in Mercurial

Branches

The default branch is earmarked as our release branch. Code that is in default can and will be deployed at any time, with short notice.

All work apart from the very trivial should be done in named branches.

Branches should be propagated to all associated project subrepositories, (this needs to be done manually).
The reason for the branch propagation is to prevent any change from spreading into mainline releases accidentally.

Some branch use-cases are below:

Developer creates a new branch

hg branch new-feature
hg commit
hg push --new-branch

Developer creates a new branch and propagates branch to subrepos

cd $APP
hg branch new-feature
cd $APP/subrepos/commonLib
hg branch new-feature
hg commit
hg push --new-branch
cd ../
hg commit
hg push --new-branch

Developer switches to new branch

hg up new-feature

Developer does work on new branch

hg commit
hg push

Developer needs to do work on trunk (called “default” in mercurial)

hg up default
<<Make Changes>
hg commit
hg push
hg up new-feature

Developer needs to merge changes from default into project branch (ReBase)

hg up new-feature
hg merge default
hg commit
hg push

Developer completes work on a branch

hg up default
hg merge new-feature
hg commit
hg push

Developer abandons a branch (task cancelled)

hg up new-feature
hg commit --close-branch
hg up default

Handling app minimisation and screen rotation

Handling app minimisation and screen rotation

How to maintain your apps state when your activity get killed by Android

The best way to achieve this is by using `onSaveInstanceState`, `onRestoreInstanceState` and your `onCreate` functions.

Inside your `onSaveInstanceState` you should save anything that you need to maintain your applications current state.
You can do this by saving variables to the `bundle` that has been passed in.

Note this function is called automatically; just before `onPause` in the lifecycle – ie. when the app is minimised or the screen is rotated.

 @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putInt("level", level);
        savedInstanceState.putInt("correct", correct);
        savedInstanceState.putInt("incorrect", incorrect);
    }

Now if android decides to destroy your activity (which is actually what happens if you rotate your screen) your `onCreate` will be called. So this is the place where you need to restore the saved data (if its there).

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            // create everything manually cause we dont have saved data
        } else {
            level = savedInstanceState.getInt("level");
            correct = savedInstanceState.getInt("correct");
            incorrect = savedInstanceState.getInt("incorrect");
        }

Note if you chose to sub class your Activity is may make sense to use onRestoreInstanceState() to restore your activities state instead of onCreate()
Android Docs

Most implementations will simply use onCreate(Bundle) to restore their state, but it is sometimes convenient to do it here after all of the initialization has been done or to allow subclasses to decide whether to use your default implementation. The default implementation of this method performs a restore of any view state that had previously been frozen by onSaveInstanceState(Bundle).

There is no reason to override onRestoreInstanceState() unless you are subclassing Activity and it is expected that someone will subclass your subclass.