SlideShare ist ein Scribd-Unternehmen logo
1 von 98
Downloaden Sie, um offline zu lesen
Android Development
vol. 2
Tomáš Kypta
Tomáš Kypta
@TomasKypta
Agenda
• Service
• Broadcast receivers
• Libraries - Retrofit
• Fragments
• Asynchronous processing
Service
Service
• for long running tasks independent on UI
• also for potentially exposing some functionality to other
apps
• extend class android.app.Service
• two types:
• started service
• bound service
Service
• by default runs on the main thread!
Started Service
• to perform some operation without returning result
to the caller
• start by calling
context.startService(Intent)
• only one instance of the service is created
Bound Service
• for interacting with other components
• to expose functionality to other apps
• client calls bindService()
• cannot be called from broadcast receiver
Bound Service
• implement onBind()
• return null if you don’t want to allow binding
Bound Service
• clients call unbindService()
• when all clients are unbound, the system destroys
the service
• no need to stop service explicitly
Service
• Started and Bound approaches can be mixed
Service Lifecycle
• service lifetimes:
• entire lifetime
• active lifetime
• start in onStartCommand() or onBind()
Service
Lifecycle
Foreground Service
• something user is actively aware of
• must provide an ongoing notification
• cannot be dismissed
• makes app a higher priority process
• startForeground()
• stopForeground()
Intent Service
Intent Service
• service for processing on background threads
• for processing independent on UI
• android.app.IntentService
Intent Service
public class MyIntentService extends IntentService {



public MyIntentService() {

super("MyIntentService");

}



@Override

protected void onHandleIntent(Intent intent) {

// run some code on background

}

}
Exercise
1. Download the code: http://github.com/avast/
android-lectures
2. Import project in “Lecture 2” to Android studio
3. Run the app on device/emulator
4. Start DownloadService from MainActivity
5. Download User in a background thread in the
service, use GitHubApi class for that
Exercise
6. Start DownloadIntentService from MainActivity
7. Download list of repositories in the IntentService,
use GitHubApi class for that
Broadcast Receiver
Broadcast Receiver
• responds to broadcasts
• broadcasts are system wide
• receivers can be registered statically or dynamically
• system or custom broadcasts
• examples:
• incoming SMS, incoming call, screen turned off, low
battery, removed SD card, …
Broadcast Receiver
• extend class
android.content.BroadcastReceiver
• void onReceive(Context, Intent) callback
• called on the main thread
• don’t do any threading there!!
Broadcast Receiver
• static registration in AndroidManifest.xml
• <receiver> tag inside <application> tag
• publicly available
• to make private use
android:exported=“false”
Broadcast Receiver
• static registration not possible for all intents
• only some exceptions - can be found in
documentation
• e.g. ACTION_BATTERY_CHANGED
Broadcast Receiver
• dynamic registration
• Context.registerReceiver(BroadcastRe
ceiver, IntentFilter)
• Context.unregisterReceiver(Broadcast
Receiver)
Broadcasts
• normal
• completely asynchronous
• undefined order of called receivers
• ordered
• one receiver at a time
• android:priority
Sending Broadcasts
• Context.sendBroadcast(Intent)
• send to all apps registered for the broadcast
• can be restricted since ICS with
Intent.setPackage(String)
• Context.sendOrderedBroadcast(Intent,
String)
Exercise
8. Create BroadcastReceiver handling
ACTION_USER_DOWNLOADED action and
register/unregister it in onStart()/onStop()
9. Notify MainActivity about successful User
download from DownloadService via broadcast
Local Broadcast
Local Broadcast
LocalBroadcastManager lbManager =
LocalBroadcastManager.getInstance(context);
lbManager.registerReceiver(mReceiver, intentFilter);
lbManager.unregisterReceiver(mReceiver);


lbManager.sendBroadcast(intent);


lbManager.sendBroadcastSync(intent);
Local Broadcast
LocalBroadcastManager lbManager =
LocalBroadcastManager.getInstance(context);
lbManager.registerReceiver(mReceiver, intentFilter);
lbManager.unregisterReceiver(mReceiver);


lbManager.sendBroadcast(intent);


lbManager.sendBroadcastSync(intent);
Local Broadcast
LocalBroadcastManager lbManager =
LocalBroadcastManager.getInstance(context);
lbManager.registerReceiver(mReceiver, intentFilter);
lbManager.unregisterReceiver(mReceiver);


lbManager.sendBroadcast(intent);


lbManager.sendBroadcastSync(intent);
Local Broadcast
LocalBroadcastManager lbManager =
LocalBroadcastManager.getInstance(context);
lbManager.registerReceiver(mReceiver, intentFilter);
lbManager.unregisterReceiver(mReceiver);


lbManager.sendBroadcast(intent);


lbManager.sendBroadcastSync(intent);
Exercise
10.Create BroadcastReceiver handling
ACTION_REPOS_DOWNLOADED action and
register/unregister it in onStart()/onStop() via local
broadcast
11.Notify MainActivity about successful User
download from DownloadIntentService via local
broadcast
Notification
Notification
• a message that can be displayed to the user
outside normal UI
• displayed in notification area
Notification
• user can open notification drawer to see the details
• app can define UI and click action
Notification
• use NotificationCompat.Builder
Notification
NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.icon)

.setContentTitle("My notification")

.setContentText("Hello World!");
Notification
NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.icon)

.setContentTitle("My notification")

.setContentText("Hello World!");
Notification
Intent resultIntent = new Intent(this, MyActivity1.class);



TaskStackBuilder stackBuilder =
TaskStackBuilder.create(this);


stackBuilder.addParentStack(MyActivity1.class);

stackBuilder.addNextIntent(resultIntent);
Notification
Intent resultIntent = new Intent(this, MyActivity1.class);



TaskStackBuilder stackBuilder =
TaskStackBuilder.create(this);


stackBuilder.addParentStack(MyActivity1.class);

stackBuilder.addNextIntent(resultIntent);
Notification
Intent resultIntent = new Intent(this, MyActivity1.class);



TaskStackBuilder stackBuilder =
TaskStackBuilder.create(this);


stackBuilder.addParentStack(MyActivity1.class);

stackBuilder.addNextIntent(resultIntent);
Notification
PendingIntent resultPendingIntent =

stackBuilder.getPendingIntent(

0,

PendingIntent.FLAG_UPDATE_CURRENT

);

mBuilder.setContentIntent(resultPendingIntent);


NotificationManager mNotificationManager =

(NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);


mNotificationManager.notify(MY_ID, mBuilder.build());
Notification
PendingIntent resultPendingIntent =

stackBuilder.getPendingIntent(

0,

PendingIntent.FLAG_UPDATE_CURRENT

);

mBuilder.setContentIntent(resultPendingIntent);


NotificationManager mNotificationManager =

(NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);


mNotificationManager.notify(MY_ID, mBuilder.build());
Notification
PendingIntent resultPendingIntent =

stackBuilder.getPendingIntent(

0,

PendingIntent.FLAG_UPDATE_CURRENT

);

mBuilder.setContentIntent(resultPendingIntent);


NotificationManager mNotificationManager =

(NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);


mNotificationManager.notify(MY_ID, mBuilder.build());
Notification
• update notification by using the same ID
Exercise
12.Create notification showing repos count when we
are notified about downloaded data.
13.Create click action for the notification that will
open ReposActivity
14.Create back stack in the click action containing
MainActivity
Application
Application
• application singleton
• onCreate() lifecycle callback
• for app initialisations
Libraries
Retrofit
• for simple declaration of RESTful API
• create an interface with annotations
• create an instance fo the interface via RestAdapter
Retrofit
• support for many formats via converters
• json, xml, protocol buffers, …
• supports sync and async download
• and more …
Exercise
15.Create Retrofit API method for getting repository
contributors
• https://developer.github.com/v3/repos/#list-
contributors
Fragment
Fragment
• represents a behavior or a portion of user interface
in an activity
• multiple fragments can be combined in a single
activity
Fragment
Activity & Fragment
• add in the layout
<fragment android:name="com.example.MyListFragment"
android:id="@+id/list"
android:layout_width="100dp"
android:layout_height="match_parent" />
Activity & Fragment
• add programmatically
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();
Activity & Fragment
• add programmatically
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();
Activity & Fragment
• add programmatically
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();
Activity & Fragment
• add programmatically
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();
Activity & Fragment
• add programmatically
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();
Fragment Back Stack
• fragments can be kept in a stack
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction transaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
Fragment Back Stacks
A A
B
A
B
C
A
B
back
Fragment Lifecycle
Fragment Lifecycle
• a bit more complicated than activity lifecycle
Fragment
Lifecycle
Fragment
Lifecycle
Activity &
Fragment
Lifecycle
Activity &
Fragment
Lifecycle
Fragment Lifecycle
Callbacks
onAttach()
• fragments associated with the activity
onCreateView()
• create fragment’s view hierarchy here
onActivityCreated()
• activity’s onCreate() method has returned
Fragment Lifecycle
Callbacks
onDestroyView()
• view hierarchy is being removed
onDetach()
• fragment is being disassociated from the activity
Fragment without a UI
• aka worker fragment
transaction.add(workFragment, “work”);
Exercise
16.Create Activity with dynamically added Fragment
Background
Processing
Threads
• main thread = UI thread
• never block the UI thread!!!
• use worker threads for time consuming operations
• networking, db, filesystem, …
• UI toolkit is not thread safe
• never manipulate UI from a worker thread!!!
Threads
• complications
• activities are restarted
• memory leaks
• crashes
Background Processing
• Thread
• AsyncTask
• IntentService
• Loader
• ThreadPoolExecutor
• AbstractThreadedSyncAdapter
Background Processing
Some people, when confronted with a
problem, think, "I know, I'll use threads,"
and then two they hav erpoblesms.
HandlerThread
HandlerThread
• holds a queue of tasks
• other threads can push tasks to it
• the thread processes its queue, one task after
another
• when the queue is empty, it blocks until something
appears
Looper and Handler
• Looper
• class that runs a message loop for a thread
• Handler
• provides interaction with the message loop
Looper and Handler
• sendMessage(Message)
• Message object, retrieve with
Message.obtain()
• post(Runnable)
• delayed versions, at time versions
Looper and Handler
• UI thread has Looper
• you can create easily another Handler
• Handler is bound to the Looper of the current
thread
• or you can explicitly provide different Looper
Loader
Loader
• asynchronous loading of data
• bound to activity or fragment
• monitor source of data, deliver changes
• reconnect after config change, don’t need to
requery
• managed by LoaderManager
Loader
• AsyncTaskLoader
• CursorLoader
Loader
• you have to implement
LoaderManager.LoaderCallbacks
Loader
@Override

public Loader<D> onCreateLoader(int id, Bundle args) {
// instantiate a new loader

return null;

}



@Override

public void onLoadFinished(Loader<D> loader, D data) {

// called when loader finished its loading

}



@Override

public void onLoaderReset(Loader<D> loader) {

// called when loader is being reset

}
Loader
@Override

public Loader<D> onCreateLoader(int id, Bundle args) {
// instantiate a new loader

return null;

}



@Override

public void onLoadFinished(Loader<D> loader, D data) {

// called when loader finished its loading

}



@Override

public void onLoaderReset(Loader<D> loader) {

// called when loader is being reset

}
Loader
@Override

public Loader<D> onCreateLoader(int id, Bundle args) {
// instantiate a new loader

return null;

}



@Override

public void onLoadFinished(Loader<D> loader, D data) {

// called when loader finished its loading

}



@Override

public void onLoaderReset(Loader<D> loader) {

// called when loader is being reset

}
Loader
@Override

public Loader<Cursor> onCreateLoader(int id, Bundle args) {

return new CursorLoader(getActivity(), mUri,
mProjection, "value > ?",
new String[]{String.valueOf(5)}, "value ASC”);

}
Loader
@Override

public void onLoadFinished(Loader<Cursor> loader, Cursor
cursor) {

mAdapter.swapCursor(cursor);

}



@Override

public void onLoaderReset(Loader<Cursor> loader) {

mAdapter.swapCursor(null);

}
Loader
@Override

public void onLoadFinished(Loader<Cursor> loader, Cursor
cursor) {

mAdapter.swapCursor(cursor);

}



@Override

public void onLoaderReset(Loader<Cursor> loader) {

mAdapter.swapCursor(null);

}
Loader
// prepare the loader

// either re-connect with an existing one,

// or start a new one.
getLoaderManager().initLoader(0, null, this);
Loader
// restart the loader to do a new query


getLoaderManager().restartLoader(0, null, this);
Exercise
17.Load repository contributors via loader in the
Fragment and display the data
18.Create statically defined receiver that will show
toast when airplane mode is enabled/disabled -
action android.intent.action.AIRPLANE_MODE
THE END

Weitere ähnliche Inhalte

Was ist angesagt?

Using Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture projectUsing Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture projectFabio Collini
 
Angular2 workshop
Angular2 workshopAngular2 workshop
Angular2 workshopNir Kaufman
 
Data Flow Patterns in Angular 2 - Sebastian Müller
Data Flow Patterns in Angular 2 -  Sebastian MüllerData Flow Patterns in Angular 2 -  Sebastian Müller
Data Flow Patterns in Angular 2 - Sebastian MüllerSebastian Holstein
 
The productive developer guide to Angular 2
The productive developer guide to Angular 2The productive developer guide to Angular 2
The productive developer guide to Angular 2Maurice De Beijer [MVP]
 
Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2Infinum
 
基於 Flow & Path 的 MVP 架構
基於 Flow & Path 的 MVP 架構基於 Flow & Path 的 MVP 架構
基於 Flow & Path 的 MVP 架構玄武 Wu
 
Commit University - Exploring Angular 2
Commit University - Exploring Angular 2Commit University - Exploring Angular 2
Commit University - Exploring Angular 2Commit University
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2Knoldus Inc.
 
Angular2 with TypeScript
Angular2 with TypeScript Angular2 with TypeScript
Angular2 with TypeScript Rohit Bishnoi
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training Patrick Schroeder
 
An introduction to Angular2
An introduction to Angular2 An introduction to Angular2
An introduction to Angular2 Apptension
 
Automated Testing in Angular Slides
Automated Testing in Angular SlidesAutomated Testing in Angular Slides
Automated Testing in Angular SlidesJim Lynch
 
Tech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new frameworkTech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new frameworkCodemotion
 

Was ist angesagt? (20)

Using Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture projectUsing Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture project
 
Dagger 2
Dagger 2Dagger 2
Dagger 2
 
Dagger2 Intro
Dagger2 IntroDagger2 Intro
Dagger2 Intro
 
Building maintainable app
Building maintainable appBuilding maintainable app
Building maintainable app
 
Epoxy 介紹
Epoxy 介紹Epoxy 介紹
Epoxy 介紹
 
Angular2 workshop
Angular2 workshopAngular2 workshop
Angular2 workshop
 
Data Flow Patterns in Angular 2 - Sebastian Müller
Data Flow Patterns in Angular 2 -  Sebastian MüllerData Flow Patterns in Angular 2 -  Sebastian Müller
Data Flow Patterns in Angular 2 - Sebastian Müller
 
Dagger 2 ppt
Dagger 2 pptDagger 2 ppt
Dagger 2 ppt
 
The productive developer guide to Angular 2
The productive developer guide to Angular 2The productive developer guide to Angular 2
The productive developer guide to Angular 2
 
Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2
 
基於 Flow & Path 的 MVP 架構
基於 Flow & Path 的 MVP 架構基於 Flow & Path 的 MVP 架構
基於 Flow & Path 的 MVP 架構
 
Commit University - Exploring Angular 2
Commit University - Exploring Angular 2Commit University - Exploring Angular 2
Commit University - Exploring Angular 2
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 
Angular2 with TypeScript
Angular2 with TypeScript Angular2 with TypeScript
Angular2 with TypeScript
 
Angular
AngularAngular
Angular
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
 
DI with Dagger2
DI with Dagger2DI with Dagger2
DI with Dagger2
 
An introduction to Angular2
An introduction to Angular2 An introduction to Angular2
An introduction to Angular2
 
Automated Testing in Angular Slides
Automated Testing in Angular SlidesAutomated Testing in Angular Slides
Automated Testing in Angular Slides
 
Tech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new frameworkTech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new framework
 

Andere mochten auch

Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.UA Mobile
 
Guide to the jungle of testing frameworks
Guide to the jungle of testing frameworksGuide to the jungle of testing frameworks
Guide to the jungle of testing frameworksTomáš Kypta
 
Guide to the jungle of testing frameworks
Guide to the jungle of testing frameworksGuide to the jungle of testing frameworks
Guide to the jungle of testing frameworksTomáš Kypta
 
Android Develpment vol. 3, MFF UK, 2015
Android Develpment vol. 3, MFF UK, 2015Android Develpment vol. 3, MFF UK, 2015
Android Develpment vol. 3, MFF UK, 2015Tomáš Kypta
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on AndroidTomáš Kypta
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for AndroidTomáš Kypta
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for AndroidTomáš Kypta
 

Andere mochten auch (7)

Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
 
Guide to the jungle of testing frameworks
Guide to the jungle of testing frameworksGuide to the jungle of testing frameworks
Guide to the jungle of testing frameworks
 
Guide to the jungle of testing frameworks
Guide to the jungle of testing frameworksGuide to the jungle of testing frameworks
Guide to the jungle of testing frameworks
 
Android Develpment vol. 3, MFF UK, 2015
Android Develpment vol. 3, MFF UK, 2015Android Develpment vol. 3, MFF UK, 2015
Android Develpment vol. 3, MFF UK, 2015
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
 

Ähnlich wie Android Develpment vol. 2, MFF UK, 2015

Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentReto Meier
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePiotr Pelczar
 
DEFCON 18- These Aren't the Permissions You're Looking For
DEFCON 18- These Aren't the Permissions You're Looking ForDEFCON 18- These Aren't the Permissions You're Looking For
DEFCON 18- These Aren't the Permissions You're Looking ForMichael Scovetta
 
The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84Mahmoud Samir Fayed
 
Building Top-Notch Androids SDKs
Building Top-Notch Androids SDKsBuilding Top-Notch Androids SDKs
Building Top-Notch Androids SDKsrelayr
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android OKirill Rozov
 
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...mfrancis
 
React Native: The Development Flow
React Native: The Development FlowReact Native: The Development Flow
React Native: The Development FlowRitesh Kumar
 
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Theo Jungeblut
 
Jollen's Presentation: Introducing Android low-level
Jollen's Presentation: Introducing Android low-levelJollen's Presentation: Introducing Android low-level
Jollen's Presentation: Introducing Android low-levelJollen Chen
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesHassan Abid
 
Android应用开发简介
Android应用开发简介Android应用开发简介
Android应用开发简介easychen
 
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)Theo Jungeblut
 
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...Theo Jungeblut
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Sam Muhanguzi
 
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to realityDaniel Gallego Vico
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Chris Ramsdale
 
Ekon25 mORMot 2 Server-Side Notifications
Ekon25 mORMot 2 Server-Side NotificationsEkon25 mORMot 2 Server-Side Notifications
Ekon25 mORMot 2 Server-Side NotificationsArnaud Bouchez
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java DevelopersYakov Fain
 

Ähnlich wie Android Develpment vol. 2, MFF UK, 2015 (20)

Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android Development
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecture
 
DEFCON 18- These Aren't the Permissions You're Looking For
DEFCON 18- These Aren't the Permissions You're Looking ForDEFCON 18- These Aren't the Permissions You're Looking For
DEFCON 18- These Aren't the Permissions You're Looking For
 
The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84
 
Building Top-Notch Androids SDKs
Building Top-Notch Androids SDKsBuilding Top-Notch Androids SDKs
Building Top-Notch Androids SDKs
 
Android101
Android101Android101
Android101
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android O
 
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
 
React Native: The Development Flow
React Native: The Development FlowReact Native: The Development Flow
React Native: The Development Flow
 
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
 
Jollen's Presentation: Introducing Android low-level
Jollen's Presentation: Introducing Android low-levelJollen's Presentation: Introducing Android low-level
Jollen's Presentation: Introducing Android low-level
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin Coroutines
 
Android应用开发简介
Android应用开发简介Android应用开发简介
Android应用开发简介
 
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)
Clean Code II - Dependency Injection at SoCal Code Camp San Diego (07/27/2013)
 
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...
Cut your Dependencies with - Dependency Injection for South Bay.NET User Grou...
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1
 
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
Ekon25 mORMot 2 Server-Side Notifications
Ekon25 mORMot 2 Server-Side NotificationsEkon25 mORMot 2 Server-Side Notifications
Ekon25 mORMot 2 Server-Side Notifications
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java Developers
 

Mehr von Tomáš Kypta

Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stackTomáš Kypta
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and AndroidTomáš Kypta
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and TabletTomáš Kypta
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on AndroidTomáš Kypta
 
Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Tomáš Kypta
 
Android Development 201
Android Development 201Android Development 201
Android Development 201Tomáš Kypta
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Tomáš Kypta
 
Užitečné Android knihovny pro vývoj a testování
Užitečné Android knihovny pro vývoj a testováníUžitečné Android knihovny pro vývoj a testování
Užitečné Android knihovny pro vývoj a testováníTomáš Kypta
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Tomáš Kypta
 
Stylování ActionBaru
Stylování ActionBaruStylování ActionBaru
Stylování ActionBaruTomáš Kypta
 
Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012Tomáš Kypta
 
Android development - the basics, FI MUNI, 2012
Android development - the basics, FI MUNI, 2012Android development - the basics, FI MUNI, 2012
Android development - the basics, FI MUNI, 2012Tomáš Kypta
 

Mehr von Tomáš Kypta (14)

Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
 
ProGuard
ProGuardProGuard
ProGuard
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and Android
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and Tablet
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014
 
Android Libraries
Android LibrariesAndroid Libraries
Android Libraries
 
Android Development 201
Android Development 201Android Development 201
Android Development 201
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013
 
Užitečné Android knihovny pro vývoj a testování
Užitečné Android knihovny pro vývoj a testováníUžitečné Android knihovny pro vývoj a testování
Užitečné Android knihovny pro vývoj a testování
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013
 
Stylování ActionBaru
Stylování ActionBaruStylování ActionBaru
Stylování ActionBaru
 
Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012
 
Android development - the basics, FI MUNI, 2012
Android development - the basics, FI MUNI, 2012Android development - the basics, FI MUNI, 2012
Android development - the basics, FI MUNI, 2012
 

Kürzlich hochgeladen

Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationRosabel UA
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Mark Reed
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptxmary850239
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17Celine George
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operationalssuser3e220a
 
EMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxEMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxElton John Embodo
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...JojoEDelaCruz
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
The Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsThe Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsRommel Regala
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEaurabinda banchhor
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptxiammrhaywood
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmStan Meyer
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptshraddhaparab530
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 

Kürzlich hochgeladen (20)

Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translation
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operational
 
EMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docxEMBODO Lesson Plan Grade 9 Law of Sines.docx
EMBODO Lesson Plan Grade 9 Law of Sines.docx
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Paradigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTAParadigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTA
 
The Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsThe Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World Politics
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSE
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and Film
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.ppt
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 

Android Develpment vol. 2, MFF UK, 2015