What's new in android 4.4 - Romain Guy & Chet Haase

95

description

http://www.paug.fr

Transcript of What's new in android 4.4 - Romain Guy & Chet Haase

Page 1: What's new in android 4.4 - Romain Guy & Chet Haase
Page 2: What's new in android 4.4 - Romain Guy & Chet Haase

Chet Haase, Android Framework engineer (Graphics & animations)Romain Guy, ex-Android Framework engineer

Page 3: What's new in android 4.4 - Romain Guy & Chet Haase

&Chet Haase Romain Guy

Chet Haase, Android Framework engineer (Graphics & animations)Romain Guy, ex-Android Framework engineer

Page 4: What's new in android 4.4 - Romain Guy & Chet Haase

A few weeks ago, Google announced the release of Android 4.4 KitKat.

Page 5: What's new in android 4.4 - Romain Guy & Chet Haase

What’s New

Today we’re going to talk about what’s new in Android. We won’t be able to cover everything but we’d like to highlight some of the most exciting new features fordevelopers and users alike.

Page 6: What's new in android 4.4 - Romain Guy & Chet Haase

Today we’re going to talk about what’s new in Android. We won’t be able to cover everything but we’d like to highlight some of the most exciting new features fordevelopers and users alike.

Page 7: What's new in android 4.4 - Romain Guy & Chet Haase

The first device to run with Android 4.4 KitKat is the newly released Google Nexus 5.It’s not the focus of our talk but here is some info about the specs: 1080p display, 2 GB of RAM,4-core 2.3 Ghz Snapdragon 800, Adreno 330 GPU, optical image stabilization…

Page 8: What's new in android 4.4 - Romain Guy & Chet Haase

In September 2013, we announced a total of 1 billion activated Android devices.One year ago, in September 2012, there were 500 million Android devices.

Page 9: What's new in android 4.4 - Romain Guy & Chet Haase

1,000,000,000devices activated

In September 2013, we announced a total of 1 billion activated Android devices.One year ago, in September 2012, there were 500 million Android devices.

Page 10: What's new in android 4.4 - Romain Guy & Chet Haase

Device activations

Here is a brief recap of the total number of activated Android devices since mid-2011.

Page 11: What's new in android 4.4 - Romain Guy & Chet Haase

May 11 Oct 11 Jan 12 Feb 12 Jun 12 Sep 12 Mar 13 Sep 13

100190

250300

400

500

750

1,000

Device activations

Here is a brief recap of the total number of activated Android devices since mid-2011.

Page 12: What's new in android 4.4 - Romain Guy & Chet Haase

JellyBean is now on >50% of Android devices and ICS 20%. Honeycomb barely registers at 0.1%.

Page 13: What's new in android 4.4 - Romain Guy & Chet Haase

HC

GB 26%

Froyo < 2%JB 52%

ICS 20%JellyBean is now on >50% of Android devices and ICS 20%. Honeycomb barely registers at 0.1%.

Page 14: What's new in android 4.4 - Romain Guy & Chet Haase

API 8-1328%

API 15-1872%

This means 72% of devices run API level 15 (ICS) or higher.

Page 15: What's new in android 4.4 - Romain Guy & Chet Haase

Documents1

Page 16: What's new in android 4.4 - Romain Guy & Chet Haase

Storage AccessFramework

The new storage API makes it easy for users to browse and open local & cloud-based documents.An advanced setting even allows to browse the entire file system.

Page 17: What's new in android 4.4 - Romain Guy & Chet Haase

private static final int READ_REQUEST_CODE = 1;

public void performFileSearch() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, READ_REQUEST_CODE);}

You can display the standard UI by using the OPEN_DOCUMENT or CREATE_DOCUMENT intents.The standard UI will show content from all registered document providers.

Page 18: What's new in android 4.4 - Romain Guy & Chet Haase

public class MyDocsProvider extends DocumentsProvider { @Override public Cursor queryRoots(String[] projection);

@Override public Cursor queryChildDocuments(String parentDocId, String[] projection, String sortOrder);

@Override public Cursor queryDocument(String documentId, String[] projection);

@Override public ParcelFileDescriptor openDocument( String documentId, String mode, CancellationSignal signal);}

To implement a new document provider you only need to implement these 4 methods.They let you manage the browsing, reading and writing of any local or remote datathat can be represented as files/documents.

Page 19: What's new in android 4.4 - Romain Guy & Chet Haase

<provider android:name="com.example.mycloud.MyCloudProvider" android:authorities="com.example.mycloud.provider" android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS">

<intent-filter> <action android:name= "android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter></provider>

You need to register your document provider by using the DOCUMENTS_PROVIDER intent filterand requesting the MANAGE_DOCUMENTS permission.

Page 20: What's new in android 4.4 - Romain Guy & Chet Haase

Printing

New printing APIs can be used to add printing capabilities to almost any kind of content.In particular, you can print anything you can render to a Canvas.

Page 21: What's new in android 4.4 - Romain Guy & Chet Haase

PdfDocument document = new PdfDocument();PageInfo pageInfo = new PageInfo.Builder( new Rect(0, 0, 100, 100), 1).create();Page page = document.startPage(pageInfo);

View content = getContentView();content.draw(page.getCanvas());

document.finishPage(page);document.writeTo(getOutputStream());document.close();

Android uses PDF as its native printing format, this means you can generate PDFdocuments from any app that can draw onto a Canvas.

Page 22: What's new in android 4.4 - Romain Guy & Chet Haase

PrintHelper bitmapPrinter = new PrintHelper(getActivity());bitmapPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);

Bitmap bitmap = BitmapFactory.decodeResource( getResources(), R.drawable.my_bitmap);bitmapPrinter.printBitmap("Untitled Image", bitmap);

The PDF API is powerful but if you want to print properly paginated bitmaps, it isrecommended you use helper classes.

Page 23: What's new in android 4.4 - Romain Guy & Chet Haase

User interface2

Page 24: What's new in android 4.4 - Romain Guy & Chet Haase

Translucent system UI

Android 4.4 allows applications to draw behind the status bar and the navigation bar.

Page 25: What's new in android 4.4 - Romain Guy & Chet Haase

Theme.Holo.NoActionBar.TranslucentDecorTheme.Holo.Light.NoActionBar.TranslucentDecor

There are two new themes you can use to request the new translucent system UI.

Page 26: What's new in android 4.4 - Romain Guy & Chet Haase

<LinearLayout android:fitsSystemWindows="true"

android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"</LinearLayout>

If you request translucent sys bars, make sure to use fitsSystemWindows for the portionof your layout that should not be covered by the system UI.

Page 27: What's new in android 4.4 - Romain Guy & Chet Haase

Immersive mode

We have a new immersive full-screen mode that hides the system UI even while the user interactswith the application. This was previously only possible for passive content such as videos. This isa great new API for content-rich applications that many of you have been asking for. To bring backthe system UI, swipe from the top or bottom edges.

Page 28: What's new in android 4.4 - Romain Guy & Chet Haase

private void hideSystemUI() { mDecorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE);}

Hiding the system UI is easy with the new SYSTEM_UI_FLAG_IMMERSIVE flag.

Page 29: What's new in android 4.4 - Romain Guy & Chet Haase

private void showSystemUI() { mDecorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}

To show the UI again, no new flag is necessary. These two methods can be used totoggle the system UI dynamically.

Page 30: What's new in android 4.4 - Romain Guy & Chet Haase

@Overridepublic void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { mDecorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); }}

Alternatively you can create a persistent immersive experience that will automaticallyre-hide the system UI after a short delay or if the user interacts with the middle of thescreen.

Page 31: What's new in android 4.4 - Romain Guy & Chet Haase

Fullscreen & hide navigation

Here are a few guidelines to help you choose the most appropriate mode.If your app needs a “lean back” experience – often found in video players –use the FULLSCREEN and HIDE_NAVIGATION flags

Page 32: What's new in android 4.4 - Romain Guy & Chet Haase

Immersive, fullscreen & hide navigation

If your app is a content reader (books, magazines, articles, etc…)use the IMMERSIVE, FULLSCREEN and HIDE_NAVIGATION flags

Page 33: What's new in android 4.4 - Romain Guy & Chet Haase

Immersive sticky, fullscreen & hide navigation

If your app is a game or a drawing app – an app that requires a lot of interaction –use the IMMERSIVE_STICKY, FULLSCREEN and HIDE_NAVIGATION flags

Page 34: What's new in android 4.4 - Romain Guy & Chet Haase

New WebView

Android 4.4 introduces a completely new backend for WebView, based on theChromium Open Source project that powers Chrome. This new WebView improvedHTML 5 support, remote debugging, etc.

Page 35: What's new in android 4.4 - Romain Guy & Chet Haase

Android 4.4 introduces a completely new backend for WebView, based on theChromium Open Source project that powers Chrome. This new WebView improvedHTML 5 support, remote debugging, etc.

Page 36: What's new in android 4.4 - Romain Guy & Chet Haase

WebView webView = (WebView) findViewById(R.id.html_content);// Enable remote debuggingwebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG);

Remote debugging is one of the best new features of the new WebView.First, you must enable debugging on the WebView instance you want to inspect.

Page 37: What's new in android 4.4 - Romain Guy & Chet Haase

Connect your device over USB to a computer running Chrome and visitchrome://inspect to start debugging your WebView.

Page 38: What's new in android 4.4 - Romain Guy & Chet Haase

chrome://inspect

Connect your device over USB to a computer running Chrome and visitchrome://inspect to start debugging your WebView.

Page 39: What's new in android 4.4 - Romain Guy & Chet Haase

Connect your device over USB to a computer running Chrome and visitchrome://inspect to start debugging your WebView.

Page 40: What's new in android 4.4 - Romain Guy & Chet Haase

Scenes & transitions

Page 41: What's new in android 4.4 - Romain Guy & Chet Haase

Scenes

// 1. From scratchScene(ViewGroup);Scene.setEnterAction(Runnable);

Page 42: What's new in android 4.4 - Romain Guy & Chet Haase

Scenes

// 2. From a layout resourceScene.getSceneForLayout(sceneRoot, R.layout.someId, context);

Page 43: What's new in android 4.4 - Romain Guy & Chet Haase

Scenes

// 3. From existing ViewGroupScene(ViewGroup, ViewGroup);

Page 44: What's new in android 4.4 - Romain Guy & Chet Haase

Transitions

// 1. Individual transitionsnew ChangeBounds();new Fade();

Page 45: What's new in android 4.4 - Romain Guy & Chet Haase

Transitions

// 2. Transition groupsTransitionSet set = new TransitionSet();set.addTransition(new ChangeBounds()) .addTransition(new Fade());

Page 46: What's new in android 4.4 - Romain Guy & Chet Haase

Transitions

// 3. From XML<transitionSet> <changeBounds/> <fade/></transitionSet>

Page 47: What's new in android 4.4 - Romain Guy & Chet Haase

Custom transitions

void captureStartValues(TransitionValues);void captureEndValues(TransitionValues);

Animator createAnimator(ViewGroup, TransitionValues, TransitionValues);

Page 48: What's new in android 4.4 - Romain Guy & Chet Haase

TransitionManager

// Inflate from XMLtm = TransitionInflater.inflateTransitionManager( R.transition.mgr, root);

<transitionManager> <transition android:fromScene="@layout/scene1" android:toScene="@layout/scene2" android:transition="@transition/changebounds" /> <transition android:fromScene="@layout/scene1" android:toScene="@layout/scene3" android:transition="@transition/faderesize" /></transitionManager>

Page 49: What's new in android 4.4 - Romain Guy & Chet Haase

TransitionManager

// Build transition sequences manuallyTransitionManager tm = TransitionManager();tm.setTransition(Scene, Transition);tm.setTransition(Scene, Transition, Transition);

Page 50: What's new in android 4.4 - Romain Guy & Chet Haase

TransitionManager

// Different ways to trigger transitionsScene.enter();

TransitionManager.go(Scene);TransitionManager.go(Scene, Transition);

tm.transitionTo(Scene, Transition);

Page 51: What's new in android 4.4 - Romain Guy & Chet Haase

The easy way

TransitionManager.beginDelayedTransition(ViewGroup);

Page 52: What's new in android 4.4 - Romain Guy & Chet Haase

3Accessibility & I18N

Page 53: What's new in android 4.4 - Romain Guy & Chet Haase

Closed captioning are now controlled by system-wide settings, found under Accessibility.Apps can access and adjust these settings using the new CaptioningManager.

Page 54: What's new in android 4.4 - Romain Guy & Chet Haase

// Add local source for English subtitlesmVideoView.addSubtitleSource( getResources().openRawResource(R.raw.subs_en_vtt), MediaFormat.createSubtitleFormat("text/vtt", Locale.ENGLISH.getLanguage()));

// Add local source for French subtitles.mVideoView.addSubtitleSource( getResources().openRawResource(R.raw.subs_fr_vtt), MediaFormat.createSubtitleFormat("text/vtt", Locale.FRENCH.getLanguage()));

When you use a VideoView you can now simply pass the captions in WebVTT format.VideoView will take care of rendering the captions according to the user’s preferences.

Page 55: What's new in android 4.4 - Romain Guy & Chet Haase

CaptioningManager manager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);manager.addCaptioningChangeListener(this);

CaptioningManager.CaptionStyle style = manager.getUserStyle();Typeface t = style.getTypeface();

The captioning manager lets you listen to preferences changes and access the stylechosen by the user, including the typeface, background color, etc.

Page 56: What's new in android 4.4 - Romain Guy & Chet Haase

Drawables auto-mirroringIn RTL mode drawables sometimes have to be mirrored (arrows for instance.) Until nowit required the app to embed two versions of each asset, one going in the drawable-rtl/resource directory. Mirroring is now handled automatically.

Page 57: What's new in android 4.4 - Romain Guy & Chet Haase

<nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/spinner_ab_default_holo_light_am" android:autoMirrored="true"></nine-patch>

Here is an example of auto-mirroring taken from Android’s framework resources.

Page 58: What's new in android 4.4 - Romain Guy & Chet Haase

Drawable d = resources.getDrawable(R.drawable.spinner);d.setAutoMirrored(true);

You can also of course set the auto-mirror property from code.

Page 59: What's new in android 4.4 - Romain Guy & Chet Haase

Supporting RTL locales is important to reach out as many users as possible but it can bedifficult to test your application – and use the system – in Arabic or Hebrew.A new developer option lets you force RTL mode with your favorite locale to test your apps.

Page 60: What's new in android 4.4 - Romain Guy & Chet Haase

Performance4

Page 61: What's new in android 4.4 - Romain Guy & Chet Haase

Re-usable bitmaps

Page 62: What's new in android 4.4 - Romain Guy & Chet Haase

// Create a 1 MB bitmap, 1 px high, 8 bits per pixelBitmap b = Bitmap.createBitmap(1024 * 1024, 1, Bitmap.Config.ALPHA_8);

// Use it as a 256x256 32 bits per pixel bitmapb.reconfigure(256, 256, Bitmap.Config.ARGB_8888);

// Returns 256x256x4 = ~262 kBint size = b.getByteCount();// Returns 1024x1024x1 = 1 MBint realSize = b.getAllocatedByteCount();

There is now a distinction between a bitmap’s backing store and its configuration. You canfor instance allocate a bitmap that’s larger than what you need. As long as it can hold enoughdata, you can reconfigure it however you please by changing the width, height and configuration.

Page 63: What's new in android 4.4 - Romain Guy & Chet Haase

// Create a 1 MB bitmap, 1 px high, 8 bits per pixelBitmap b = Bitmap.createBitmap(1024 * 1024, 1, Bitmap.Config.ALPHA_8);

// Re-use our scratch bitmap for decodingBitmapFactory.Options opts = new BitmapFactory.Options();opts.inBitmap = b;

// Resizing is now supported when re-using bitmapsopts.inSampleSize = 2;

// Decode an input stream into our bitmapBitmapFactory.decodeStream(in, null, opts);

This is of course particularly useful when decoding bitmaps from external resources.You can pre-allocate bitmaps large enough to hold your incoming data and never allocatenew bitmaps.

Page 64: What's new in android 4.4 - Romain Guy & Chet Haase

Shared assets texture

Android 4.4 now generates a single texture containing all the framework assets, shared byall processes. This saves a bit of memory in every process but it also helps batching andmerging drawing operations to optimize applications automatically.

Page 65: What's new in android 4.4 - Romain Guy & Chet Haase

Re-ordering & merging

This is an example of re-ordering & merging with Android 4.4 on Nexus 7 (2013).Note how checked and unchecked boxes are drawn together.

Page 66: What's new in android 4.4 - Romain Guy & Chet Haase

Software v-sync

SurfaceFlinger in OpenGL ES 2.0

Asynchronous texture uploads

Other notable graphics improvements. Software v-sync triggers redraws a little ahead ofthe hardware v-sync to reduce latency. Async texture uploads improve apps that usesa large number of glyphs (CJK, emojis, etc…)

Page 67: What's new in android 4.4 - Romain Guy & Chet Haase

RenderScript

RenderScript is now part of the NDK.There is also a support library.

Page 68: What's new in android 4.4 - Romain Guy & Chet Haase

mRs = new RSC::RS();mRs->init(RSC::RS_INIT_LOW_LATENCY | RSC::RS_INIT_SYNCHRONOUS);

mRsElement = RSC::Element::A_8(mRs);mRsScript = RSC::ScriptIntrinsicBlur::create(mRs, mRsElement);

RSC::sp<const RSC::Type> t = RSC::Type::create(mRs, mRsElement, width, height, 0);RSC::sp<RSC::Allocation> ain = RSC::Allocation::createTyped(mRs, t, RS_ALLOCATION_MIPMAP_NONE, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, inImage);RSC::sp<RSC::Allocation> aout = RSC::Allocation::createTyped(mRs, t, RS_ALLOCATION_MIPMAP_NONE, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, outImage);

mRsScript->setRadius(radius);mRsScript->setInput(ain);mRsScript->forEach(aout);

This is how Android’s hardware renderer uses RenderScript intrinsics. This gives the renderera 2-3x boost over native code when applying blurs to textures.

Page 69: What's new in android 4.4 - Romain Guy & Chet Haase

performTraversals

draw

getDL drawDisplayList

systrace

flush drawing commands

systrace got even more useful in Android 4.4, with new tags (animations, inflation, etc.)and the ability to use it from monitor (DDMS). Let’s look at a demo, using Launcher.

Page 70: What's new in android 4.4 - Romain Guy & Chet Haase

Android 4.4 introduces a new overdraw debugging tool that shows you the amount ofoverdraw per window.

Page 71: What's new in android 4.4 - Romain Guy & Chet Haase

Project SvelteProject Svelte was an effort in Android 4.4 to reduce memory usage across the board(system & apps) to ensure KitKat can run well on devices with 512 MB of physical RAM.

Page 72: What's new in android 4.4 - Romain Guy & Chet Haase

Procstats

Page 73: What's new in android 4.4 - Romain Guy & Chet Haase

$ adb shell dumpsys procstats com.google.android.apps.maps

COMMITTED STATS FROM 2013-11-05-18-04-58: * com.google.android.apps.maps / u0a60: TOTAL: 1.1% Service: 1.1% (Cached): 99% (98MB-98MB-99MB/96MB-97MB-97MB over 7)

Run time Stats: Screen Off / Norm / +1h19m25s22ms Screen On / Norm / +10m43s963ms TOTAL: +1h30m8s985ms

Start time: 2013-11-05 18:04:58 Total elapsed time: +5h9m53s44ms (complete) libdvm.so chromeview

Page 74: What's new in android 4.4 - Romain Guy & Chet Haase

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

if (activityManager.isLowRamDevice()) { // Modify memory use behavior}

Page 75: What's new in android 4.4 - Romain Guy & Chet Haase

Connectivity & media 5

Page 76: What's new in android 4.4 - Romain Guy & Chet Haase

Bluetooth HID over GATT (HOGP)

IR blasters

NFC host card emulation

Low-power sensors

Step detection and counting sensors

Page 77: What's new in android 4.4 - Romain Guy & Chet Haase

Adaptive playbackSupport for adaptive video playback is now available with the MediaCodec APIs, enabling seamless change in resolution during playback onto a Surface. You can feed the decoder input frames of a new resolution and the resolution of the output buffers change without a significant gap.

Page 78: What's new in android 4.4 - Romain Guy & Chet Haase

Loudness enhancerThe LoudnessEnhancer is a new subclass of AudioEffect that allows you to increase the audible volume of your MediaPlayer or AudioTrack. This can be especially useful in conjunction to increase the volume of spoken audio tracks while other media is currently playing.

Page 79: What's new in android 4.4 - Romain Guy & Chet Haase

private void setupImageReader() { mReader = ImageReader.newInstance(width, height, 2); mReader.setOnImageAvailableListener(this, mHandler); playVideo(mReader.getSurface());}

@Overridepublic void onImageAvailable(ImageReader reader) { Image image = reader.acquireLatestImage(); for (Image.Plane plane : image.getPlanes()) { processImageData(plane.getBuffer(), image.getWidth(), image.getHeight()); }}

The new ImageReader API provides you direct access to image buffers as they are renderedinto a Surface. The Image object provides direct access to the image's timestamp, format,dimensions, and pixel data.

Page 80: What's new in android 4.4 - Romain Guy & Chet Haase

android:sdk $ adb shell screenrecord ⏎ /sdcard/my_app.mp4

android:sdk $ adb pull /sdcard/my_app.mp4

Android 4.4 adds a long awaited feature: screen recording. The screenrecord commandcan record a video of your device for a duration of up to 3 minutes.

Page 81: What's new in android 4.4 - Romain Guy & Chet Haase

You can also invoke the screen recording command from Android Studio.The record button can be found in the “Android DDMS” panel (Alt-6).

Page 82: What's new in android 4.4 - Romain Guy & Chet Haase

You can also invoke the screen recording command from Android Studio.The record button can be found in the “Android DDMS” panel (Alt-6).

Page 83: What's new in android 4.4 - Romain Guy & Chet Haase

And more!6

Page 84: What's new in android 4.4 - Romain Guy & Chet Haase

SELinux set to “enforcing”

Improved cryptographic algorithms

Per-user VPN on multi-user devices

Page 85: What's new in android 4.4 - Romain Guy & Chet Haase

Map<String, List<Drawable>> drawables = new HashMap<>();

Android 4.4 supports new language features such as the diamond operator.The compiler can infer the type of the right-hand side expression for us.This feature is retro-compatible.

Page 86: What's new in android 4.4 - Romain Guy & Chet Haase

String command = getCommand();switch (command) { case "start": start(); break; case "stop": stop(); break;}

It is not possible to use String types in switch statements. This makes the code a lotmore readable than a series of if (mystring.equals(“astring”)).This feature is retro-compatible.

Page 87: What's new in android 4.4 - Romain Guy & Chet Haase

try (PrintWriter out = new PrintWriter("data.out")) { for (String line : getData()) { out.println(line); }} catch (IOException e) { // Do something smart}

Automatic resource management will take care of calling close() for you.No more try/catch for IOException around close() calls in your finally statement!Auto resource management works on classes that implement AutoCloseable,present in API level 19 only.

Page 88: What's new in android 4.4 - Romain Guy & Chet Haase

try { readFile();} catch (FileNotFoundException | IOException e) { // Do something useful}

If several exceptions are thrown in a block of code and needs to be handled thesame way, you can now catch them all with a single catch without catchinga base class.This feature is retro-compatible.

Page 89: What's new in android 4.4 - Romain Guy & Chet Haase

New runtime

Android 4.4 offers the option to switch to a new runtime, called ART, for developmentpurposes only. ART is included so you can test your application but Dalvik should remainthe default runtime for normal use.

Page 90: What's new in android 4.4 - Romain Guy & Chet Haase

To enable ART, go to Developer options, and click the “Select runtime” entry.After selecting ART you will need to reboot the device.

Page 91: What's new in android 4.4 - Romain Guy & Chet Haase

Android 4.4 DevBytesgoo.gl/2bpmDA

DevBytes is a series of videos that dive deeper in some of the features presented here.They are a great resource and highly recommended if you want to learn more aboutthe new Android 4.4 APIs.

Page 92: What's new in android 4.4 - Romain Guy & Chet Haase

More info

developer.android.com/about/versions/android-4.4.html

developer.android.com/about/versions/kitkat.html

Page 93: What's new in android 4.4 - Romain Guy & Chet Haase

More infoRomain’s Tips & Trickswww.curious-creature.org

Chet’s Tips & Tricksgraphics-geek.blogspot.com

Page 94: What's new in android 4.4 - Romain Guy & Chet Haase

Chet Haasegoogle.com/+ChetHaase

Romain Guygoogle.com/+RomainGuy

Page 95: What's new in android 4.4 - Romain Guy & Chet Haase