SlideShare a Scribd company logo
IMPROVING ANDROID EXPERIENCE FOR
BOTH USERS AND DEVELOPERS
droidcon Berlin 2013, Pavel Lahoda,Actiwerks Ltd.
LET’S HAVE A LITTLE WARMUP
ANDROID.UTIL.LOG
HOW MANYTIMESYOU’VETYPEDTHIS ?
prn.log("Index=" + i);
HOW ABOUTTHIS ?
public static String cc(int depth) {
	 	 if(skipCallStackCode == true) {
	 	 	 return NA; // short-circuit for production
	 	 }
	 	 StackTraceElement[] ste = getStackTrace(null);
	 	 int depthCount = 0;
	 	 boolean shallowFlag = true;
	 	 for(StackTraceElement element : ste) {
	 	 	 if(prn.class.getName().equals(element.getClassName()) == true) {
	 	 	 	 // always ignore elements that are above this class in the stack
	 	 	 	 shallowFlag = false;
	 	 	 } else {
	 	 	 	 if(shallowFlag == false) {
	 	 	 	 	 if(depthCount >= depth) {
	 	 	 	 	 	 String name = element.getFileName();
	 	 	 	 	 	 if(name != null) {
	 	 	 	 	 	 	 if(name.endsWith(".java")) {
	 	 	 	 	 	 	 	 name = name.substring(0, name.length()-5);
	 	 	 	 	 	 	 }
	 	 	 	 	 	 } else {
	 	 	 	 	 	 	 name ="[?]";
	 	 	 	 	 	 }
	 	 	 	 	 	 return name;
	 	 	 	 	 } else {
	 	 	 	 	 	 depthCount++;
	 	 	 	 	 }
	 	 	 	 }
	 	 	 }
	 	 }
	 	 return NA_BUG;
	 }
HOW DOES IT WORK ?
GITHUB LINK
WHERE ISTHE UX ?
HAVE TIME TO WORK ON AWESOME
STUFF !
IMPORTANCE OF HAVING
YOUR VIEW FLEXIBLE
ANDROID AND WEB COMMON STUFF
UNLIMITED AMOUNT OF DISPLAY SIZES
WEBTRENDS: RESPONSIVE DESIGN
ANDROIDTRENDS: LOTS OF WORK
CURRENT ANDROID LAYOUTS ARE
NOT FLEXIBLE ENOUGH
ALTERNATIVE:
USE PURE JAVAVIEWGROUP
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpecSize = View.MeasureSpec.getSize(widthMeasureSpec);
	 tinyGap = widthSpecSize/100;
	 myComponent.measure(View.MeasureSpec.makeMeasureSpec(LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY),
	 	 	 	 View.MeasureSpec.makeMeasureSpec(LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY));
// more component’s measuring goes there
	 setMeasuredDimension(widthSpecSize, newHeight);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
myComponent.layout(x, y, x+myComponent.getMeasuredWidth(), y+titleLabel.getMeasuredHeight());
// more component’s layout goes there
}
ONMEASURE() - PLACE FORYOUR LOGIC
NO NEEDTO REBIND COMPONENTS OR
CALL SLOW LAYOUT INFLATE CODE
WORKS GREAT FOR ORIENTATION
CHANGES
BBC NEWS FORTABLETS EXAMPLE
INSPIRATION:
WEB RESPONSIVE LAYOUT
DEAL WITH MANY DIFFERENT SCREEN
SIZES
STANDOUT - FLOATING WINDOWS
ACTION BAR
ONE OF WORST EXAMPLES
OF API DESIGN
ACTIONBAR IS NOT A DESCENDANT OF
AVIEW
BLOG.PERPETUMDESIGN.COM/2011/08/
STRANGE-CASE-OF-DR-ACTION-AND-
MR-BAR.HTML
ACTIONBARSHERLOCK
ACTION BAR PLUS
PROBLEM ?
AB OCCUPIES ~10% OF SCREEN SPACE
FUNCTIONALITY OFTEN REDUCEDTO
BRANDING
FLY-OUT MENU:A FACEBOOK SOLUTION
NOT CONSISTENT WITHTHE REST OF
ACTIONBAR FUNCTIONALITY
ACTIONBAR PARTS
ACTIONBAR BEHAVIOR
Touch here shows
a menu with options
Touch here moves up in hierarchy
Touch here performs action
Touch here show a menu with options
Any extension should stay consistent with this
DON’T CONFUSEYOUR USERS
OWN APPS’D USE SOME UX FACELIFT
STILL WANT MORE FROMTHE
ACTIONBAR AREA ?
ACTION BAR PLUS
CUSTOM ACTIONBAR IMPLEMENTATION
EMBRACE EXTRA DIMENSION
TWOTYPES OF NAVIGATION
MAKE SURETHERE IS DEAD AREATO
SEPARATE FROM NOTIFICATION BAR
GESTURE
USE MIDDLE AS BONUS CONTENT
SUCH AS STUFF OUTSIDETHE APP
2D JUST ON OVERFLOW
ACTIONS ARE EITHERTOUCH
OR SWIPE DOWN
ACCESSTO HELP ON ACTIONS
EMBRACE MULTITOUCH
EASY SPLITVIEW FEATURE
BROADCASTTHE AVAILABLE SCREEN
actiwerks.intent.splitview
DESCRIPTION OFTHE INTENT APPEARS SOON ONTHE OPENINTENTS.ORG
BROADCAST DETAILS
private Intent splitIntent;
splitIntent = new Intent();
splitIntent.setAction("actiwerks.intent.splitview");
splitIntent.removeExtra("APP_SPLIT_SIZE");
splitIntent.putExtra("APP_SPLIT_SIZE", windowVerticalOffset);
getContext().sendBroadcast(splitIntent);
RECEIVETHE BROADCAST
<receiver android:name="AppSplitViewReceiver" >
<intent-filter>
<action android:name="actiwerks.intent.splitview" />
</intent-filter>
</receiver>
public class AppSplitViewReceiver extends BroadcastReceiver {
	 @Override
	 public void onReceive(Context context, Intent intent) {
	 	 if(intent.getAction() != null &&
intent.getAction().equals("actiwerks.intent.splitview")) {
	 	 	 int peekSize = intent.getIntExtra("APP_SPLIT_SIZE", -1);
	 	 	 // Handle the intent in the app, resize the window/layout accordingly
	 	 }
	 }
}
ACTIONBARPLUS INTHE GITHUB
FUN WITHTHE LISTVIEW
PROBLEM ?
ARRAYADAPTER API NOT DESIGNED
FOR GENERICVIEWGROUP
interface ViewAdapterBinder<T, V> {
public void bindViewToData(V view, T data);
}
public class ArrayViewGroupAdapter<T, V extends ViewGroup> extends ArrayAdapter<T>
BIND DATATOVIEW
public View getView(int position, View convertView, ViewGroup parent){
	 	
	 // assign the view we are converting to a local variable
	 V v = null;
	 try {
	 	 v = (V) convertView;
	 } catch(ClassCastException ccex) {}
// safe to ignore, keep null to force new instance to be created
	 // first check to see if the view is null. if so, we have to inflate it.
	 // to inflate it basically means to render, or show, the view.
	 if (v == null) {
	 	 v = getInstanceOfV();
	 }
	 T data = getItem(position);
	 if (data != null && binder != null) {
	 	 binder.bindViewToData(v, data);
	 } else {
	 	 // signal error here
	 	 prn.log("Can't bind data to view " + position);
	 }
	 // the view must be returned to our activity
	 return v;
}
private V getInstanceOfV() {
ParameterizedType superClass = (ParameterizedType)
getClass().getGenericSuperclass();
	 Class<V> type = (Class<V>) superClass.getActualTypeArguments()[1];
try {
return type.getDeclaredConstructor(Context.class).newInstance(getContext());
} catch (Exception ex) {
// Oops, no default constructor
throw new RuntimeException(ex);
}
}
public class SampleArrayAdapter extends ArrayViewGroupAdapter<SampleData, SampleListItem> {
	 public SampleArrayAdapter(Context context) {
	 	 super(context, new ArrayViewGroupAdapter.ViewAdapterBinder<SampleData, SampleListItem>() {
	 	 	
	 	 	 @Override
	 	 	 public void bindViewToData(SampleListItem view, SampleData data) {
	 	 	 	 view.setTitle(data.getTitle());
	 	 	 	 view.setDetails(data.getDetails());
	 	 	 }
	 	 	
	 	 });
	 }
}
ATYPE-SAFE, REFACTORING FRIENDLY
SOLUTION
ADVANTAGES FORTHE DEVELOPER AND
THE USER
INSTANT LISTS WITH INTROSPECTION
OBJECTFORMS.COM
FLEXIBLE LAYOUT ALLOWS RESIZING
PINCHTO ZOOM GESTURE IN LISTS
TIME AND DATE PICKER
PROBLEM ?
UNLIKE OTHER WIDGETS,
TIME & DATE PICKER NEEDS DIALOG
(OR PLENTY OF SPACE)
SOLUTION:
SPLIT EDITING INTO SPECIALIZED
TIME & DATE KEYBOARD
DIRECT MANIPULATION GESTURE
“KEYBOARD” FOR DATE SELECTION
NOTOUCH AT ALL
KINETIC GESTURES
SHAKE GESTURE
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake) {
[self showAlert];
}
}
//When a gesture is detected (and ended) the showAlert method is called.
-(IBAction)showAlert
{
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"ShakeGesture Demo"
message:@"Shake detected"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
AREATHAT IS NOT GETTINGTHE LOVE
IT DESERVERS
TIM BRAY : SENSPLORE
SENSOR FUSION
http://
www.youtube.com/
watch?
v=C7JQ7Rpwn2k
SAMSUNG GESTURES
HELP US SHAPETHE FUTURE
http://www.kineticgestures.org
TAKEWAY
Q & A
THANKYOU
PAVEL LAHODA
PAVEL@ACTIWERKS.COM
@PERPETUMDESIGN

More Related Content

What's hot

What the fragments
What the fragmentsWhat the fragments
What the fragments
Gowtham Kumar
 
React lecture
React lectureReact lecture
React lecture
Christoffer Noring
 
Firebase ng2 zurich
Firebase ng2 zurichFirebase ng2 zurich
Firebase ng2 zurich
Christoffer Noring
 
Redux with angular 2 - workshop 2016
Redux with angular 2 - workshop 2016Redux with angular 2 - workshop 2016
Redux with angular 2 - workshop 2016
Nir Kaufman
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
ang0123dev
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2
Kirill Rozov
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
Chul Ju Hong
 
Everything You (N)ever Wanted to Know about Testing View Controllers
Everything You (N)ever Wanted to Know about Testing View ControllersEverything You (N)ever Wanted to Know about Testing View Controllers
Everything You (N)ever Wanted to Know about Testing View Controllers
Brian Gesiak
 
Material Design and Backwards Compatibility
Material Design and Backwards CompatibilityMaterial Design and Backwards Compatibility
Material Design and Backwards Compatibility
Angelo Rüggeberg
 
知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips
ikeyat
 
Stay with React.js in 2020
Stay with React.js in 2020Stay with React.js in 2020
Stay with React.js in 2020
Jerry Liao
 
Quick: Better Tests via Incremental Setup
Quick: Better Tests via Incremental SetupQuick: Better Tests via Incremental Setup
Quick: Better Tests via Incremental Setup
Brian Gesiak
 
Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)
Gabor Varadi
 
Redux pattens - JSHeroes 2018
Redux pattens - JSHeroes 2018Redux pattens - JSHeroes 2018
Redux pattens - JSHeroes 2018
Nir Kaufman
 
Deep Dive into React Hooks
Deep Dive into React HooksDeep Dive into React Hooks
Deep Dive into React Hooks
Felix Kühl
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andev
Mike Nakhimovich
 
Testing view controllers with Quick and Nimble
Testing view controllers with Quick and NimbleTesting view controllers with Quick and Nimble
Testing view controllers with Quick and Nimble
Marcio Klepacz
 
Average- An android project
Average- An android projectAverage- An android project
Average- An android projectIpsit Dash
 
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
Ali Parmaksiz
 

What's hot (20)

What the fragments
What the fragmentsWhat the fragments
What the fragments
 
React lecture
React lectureReact lecture
React lecture
 
Firebase ng2 zurich
Firebase ng2 zurichFirebase ng2 zurich
Firebase ng2 zurich
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
Redux with angular 2 - workshop 2016
Redux with angular 2 - workshop 2016Redux with angular 2 - workshop 2016
Redux with angular 2 - workshop 2016
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
 
Everything You (N)ever Wanted to Know about Testing View Controllers
Everything You (N)ever Wanted to Know about Testing View ControllersEverything You (N)ever Wanted to Know about Testing View Controllers
Everything You (N)ever Wanted to Know about Testing View Controllers
 
Material Design and Backwards Compatibility
Material Design and Backwards CompatibilityMaterial Design and Backwards Compatibility
Material Design and Backwards Compatibility
 
知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips
 
Stay with React.js in 2020
Stay with React.js in 2020Stay with React.js in 2020
Stay with React.js in 2020
 
Quick: Better Tests via Incremental Setup
Quick: Better Tests via Incremental SetupQuick: Better Tests via Incremental Setup
Quick: Better Tests via Incremental Setup
 
Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)Architecting Single Activity Applications (With or Without Fragments)
Architecting Single Activity Applications (With or Without Fragments)
 
Redux pattens - JSHeroes 2018
Redux pattens - JSHeroes 2018Redux pattens - JSHeroes 2018
Redux pattens - JSHeroes 2018
 
Deep Dive into React Hooks
Deep Dive into React HooksDeep Dive into React Hooks
Deep Dive into React Hooks
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andev
 
Testing view controllers with Quick and Nimble
Testing view controllers with Quick and NimbleTesting view controllers with Quick and Nimble
Testing view controllers with Quick and Nimble
 
Average- An android project
Average- An android projectAverage- An android project
Average- An android project
 
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
 

Viewers also liked

Scandinavian Rail Development 2013 - Bjarne Ivar Wist
Scandinavian Rail Development 2013 - Bjarne Ivar WistScandinavian Rail Development 2013 - Bjarne Ivar Wist
Scandinavian Rail Development 2013 - Bjarne Ivar WistRussell Publishing
 
Top 5 myths about social learning forslideshare
Top 5 myths about social learning forslideshareTop 5 myths about social learning forslideshare
Top 5 myths about social learning forslideshareAnuj Kapoor
 
N miranda-aranda de duero
N miranda-aranda de dueroN miranda-aranda de duero
N miranda-aranda de duero099000151
 
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...CTom Hash
 
Imentra conseil - Offre IMMO-PLANNER
Imentra conseil - Offre IMMO-PLANNERImentra conseil - Offre IMMO-PLANNER
Imentra conseil - Offre IMMO-PLANNER
MarieAudeMillet
 
Introduction des systèmes d'information géographiques (SIG)
Introduction des systèmes d'information géographiques (SIG)Introduction des systèmes d'information géographiques (SIG)
Introduction des systèmes d'information géographiques (SIG)
Institut Pasteur de Madagascar
 
Diagnostic parasitologique des accès palustres: acquis et défis
Diagnostic parasitologique des accès palustres: acquis et défisDiagnostic parasitologique des accès palustres: acquis et défis
Diagnostic parasitologique des accès palustres: acquis et défis
Institut Pasteur de Madagascar
 
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - waterBilling Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
ERP - Billing & CRM
 
Lhervas aranda de duero
Lhervas aranda de dueroLhervas aranda de duero
Lhervas aranda de duero099000151
 
Single drama analysis missed
Single drama analysis missedSingle drama analysis missed
Single drama analysis missedLydia jill
 
Weekly jobs presentation oil & gas
Weekly jobs presentation   oil & gasWeekly jobs presentation   oil & gas
Weekly jobs presentation oil & gas
RZ Group
 
Талица
ТалицаТалица
ТалицаURFU
 
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
DoceboElearningITA
 
козацький гарт
козацький гарткозацький гарт
козацький гартYury Fedorchenko
 

Viewers also liked (19)

Scandinavian Rail Development 2013 - Bjarne Ivar Wist
Scandinavian Rail Development 2013 - Bjarne Ivar WistScandinavian Rail Development 2013 - Bjarne Ivar Wist
Scandinavian Rail Development 2013 - Bjarne Ivar Wist
 
Top 5 myths about social learning forslideshare
Top 5 myths about social learning forslideshareTop 5 myths about social learning forslideshare
Top 5 myths about social learning forslideshare
 
N miranda-aranda de duero
N miranda-aranda de dueroN miranda-aranda de duero
N miranda-aranda de duero
 
Diseminación de rea rmb
Diseminación de rea rmbDiseminación de rea rmb
Diseminación de rea rmb
 
Pendapatan nasional
Pendapatan nasionalPendapatan nasional
Pendapatan nasional
 
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...
Rajaram et al. 2013. EST-SSRs and consensus map. BMC Genomics, doi 1471-2164-...
 
Imentra conseil - Offre IMMO-PLANNER
Imentra conseil - Offre IMMO-PLANNERImentra conseil - Offre IMMO-PLANNER
Imentra conseil - Offre IMMO-PLANNER
 
Introduction des systèmes d'information géographiques (SIG)
Introduction des systèmes d'information géographiques (SIG)Introduction des systèmes d'information géographiques (SIG)
Introduction des systèmes d'information géographiques (SIG)
 
Diseminación de rea rmb
Diseminación de rea rmbDiseminación de rea rmb
Diseminación de rea rmb
 
5rugyiu
5rugyiu5rugyiu
5rugyiu
 
Diagnostic parasitologique des accès palustres: acquis et défis
Diagnostic parasitologique des accès palustres: acquis et défisDiagnostic parasitologique des accès palustres: acquis et défis
Diagnostic parasitologique des accès palustres: acquis et défis
 
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - waterBilling Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
Billing Fatturazione Incassi - EBC360 utility -all in one- energy.gas - water
 
Lhervas aranda de duero
Lhervas aranda de dueroLhervas aranda de duero
Lhervas aranda de duero
 
Single drama analysis missed
Single drama analysis missedSingle drama analysis missed
Single drama analysis missed
 
Weekly jobs presentation oil & gas
Weekly jobs presentation   oil & gasWeekly jobs presentation   oil & gas
Weekly jobs presentation oil & gas
 
Талица
ТалицаТалица
Талица
 
Buddies 2013
Buddies 2013Buddies 2013
Buddies 2013
 
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
4 - Come usare Storyline con Docebo: caricare in LMS un Learning Object
 
козацький гарт
козацький гарткозацький гарт
козацький гарт
 

Similar to Improving android experience for both users and developers

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)
Alfredo Morresi
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
Robert DeLuca
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Android 3
Android 3Android 3
Android 3
Robert Cooper
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
Tomáš Kypta
 
Backendless apps
Backendless appsBackendless apps
Backendless apps
Matteo Bonifazi
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 
JavaScript Refactoring
JavaScript RefactoringJavaScript Refactoring
JavaScript Refactoring
Krzysztof Szafranek
 
Android best practices
Android best practicesAndroid best practices
Android best practices
Jose Manuel Ortega Candel
 
That’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryThat’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your Battery
Michael Galpin
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
Glenn Stovall
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
Andrew Dupont
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
Michael Galpin
 
Durable functions 2.0 (2019-10-10)
Durable functions 2.0 (2019-10-10)Durable functions 2.0 (2019-10-10)
Durable functions 2.0 (2019-10-10)
Paco de la Cruz
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
javatwo2011
 
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for XamarinGet the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Xamarin
 

Similar to Improving android experience for both users and developers (20)

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Android 3
Android 3Android 3
Android 3
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Backendless apps
Backendless appsBackendless apps
Backendless apps
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 
JavaScript Refactoring
JavaScript RefactoringJavaScript Refactoring
JavaScript Refactoring
 
Android best practices
Android best practicesAndroid best practices
Android best practices
 
That’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryThat’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your Battery
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Durable functions 2.0 (2019-10-10)
Durable functions 2.0 (2019-10-10)Durable functions 2.0 (2019-10-10)
Durable functions 2.0 (2019-10-10)
 
Introduction toandroid
Introduction toandroidIntroduction toandroid
Introduction toandroid
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for XamarinGet the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
 

Recently uploaded

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 

Recently uploaded (20)

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 

Improving android experience for both users and developers