Romain is an engineer at Google. He worked on the Android Framework team, leading the UI toolkit and UI renderer, and now works on new Kotlin and graphics related projects.View the profile
Chet leads the Android Toolkit team at Google, which works on UI, APIs, graphics, text, and animations to help Android developers create rich applications.View the profile
About the talk
The last couple of years have seen a plethora of new features and patterns for Android developers. But how do developers know when to use existing APIs and features vs. new ones? This session will help developers understand how they all work together and learn what they should use to build solid, modern Android applications.
Hello. Welcome to another talk. Welcome to Modern Android development. I should point out before we start that this sun is a lot brighter than I am. So so so that's going to be fun. We'll see how this goes today. Welcome to Modern Android development on Chet Haas from the Android toolkit team and I'm on my way from Dandridge from work seems like something and we're going to talk about a bunch of stuff that you probably already know, but it occurred to us that we have given you
advice and information about how to develop good apps for Android over the years and that information has changed over the years as we've introduced new capabilities new apis new performance on the platform all kinds of things and so it's a little confusing you could go search for information even on some of our Dockside and maybe we get information that doesn't really apply to a lot of situations currently. So we wanted to wrap it all together and say here's our current 2018 view of the important things to think about Android. A 10 years old is cherer and yet I said said a lot of outdated
information sometimes and blogs on stackoverflow. Someone being really mad about something don't be mad. It's okay because we hate suicide because we were wrong it's because it was a different time different needs different devices. So we're going to talk about some of that just to make sure you understand the difference between the modern way of doing something and the old way of doing saying we have a slight hint on the side. So some of the tides are going to look like this. So let us begin, so I think I'm going to try
and wine. This is sort of all the you know history of Android over time. So 1.8. I won. Okay. I'm out in 2008 and then tell me we didn't do much for several years and I don't know what was going on there. I just couldn't think of the things to put in their optimize optimize optimize Android Studio came out February busy building bad itchy eyes and Richard capabilities, then we could at the time art came out. It was let's see it was off by default in KitKat and it was the only run time and lollipop. This is huge as you'll see in some of our recommendations there because it
really has changed over time the way we look at the way you should write your code prior to all the information does not necessarily apply in an art world. Recyclerview was released in Porton because it was a better version of Let's be with more flexibility. But also we started releasing components in this port Library disconnected from platform releases, which means you could use these new capabilities in your applications across all the releases that you cared about little while later. We had constraintlayout built into Android Studio a richer way, it actually designing Arabia allies
as opposed to the rich way of typing XML directly. I think that came out last year. I don't know some IO conference or something architecture components. These were announced last year one. O in the new way of doing things where we are trying to solve or at least help with a lot of complex problems with Android and taking feedback from the community and iterating on that degrade developer API, is that make things easier for you. That is the whole goal Studio profiler so much richer way for actually figure out with a performance metrics are for your application KTX the
extension library that came out a couple of months ago for kotlin. And recently the paging Library came out and went one. Oh just this week. So this is sort of a scope of some of the things that have happened over time. I'm pretty sure there was more going on between 2008 and 2013. I just can't remember what it was a nice touch with tools. He is a tool that you may know how many of you have used these two hearts Kira pretty good and not everyone there was a lot of juice the kid was Standalone application another version before that one. That was the one originally wrote in
the weekend because I needed it wasn't the fastest to it wasn't the prettiest tool x-ray. This one was built by someone enough for spending a lot of time before the courts work. So now we replaced it with something much better cold Dallas inspector. It's fell off of Android Studio. I one of the nice benefits that you can open multiple. Inspections at once it's a lot lot faster than use that tool to use it. It's a very easy way to analyze your heart key and sometimes if you have too many views that overlap each other. Is another one that said the old way
of providing the code. So that was cool Trace view to treasure. He's a tool that already existed when I joined Android team in 2007 has been around for quite a while. He received in action inside of a clip on tool to one of these shoes that we had with trays were the original version. Was it an instrument for fire. So there was a lot of overhead it was running around every method that was involved was running in interpreting mode until you can reach what's the number so when he said, you know this method took 300 seconds that wasn't true the mess of that tree was a lot faster than that
and the other related to star in between the two methods and even that was difficult because if a message wasn't looking native Canadian food was not affected. So any messages looking very good with skewed because you never answer wrong over the years. We had it sampling for finding a stool. Material is very difficult to use only a few of us when we're using its internal it because it wasn't that great a few hours later gives you a comprehensive view of the entire system tells you how much time you spend every
line of couldn't physically but sometimes has come from somewhere else in the block them something that's in a different process gives you the view that you need it before that were completely in the blank and now we have new providers that have been introduced us to do a single factor of 3.2 or 3.1. They don't really remember but did you go to the graph of the CPU application and you should do you graph and when I get to the view looks very similar to trace you against a lot faster and if it's to do Native good for filing
instrument for filing sampling. Insist that you should be using from now on and this is what I believe you won the memory won the nickel coin and you know if you want I've never used before but I'm sure you guys understand that and you will make good use of it. And that's what it looks like. When you when you enter this this to do for failure to get the flame Gratiot different ways of analyzing the data. The one I like is the plane graph is going to colorize old
dysfunction caused with different colors, depending on how much time it takes to anything that shows in red Shades Darker Orange Bowl next inside your applications of town, and I didn't inside your application in Linux. This is the need for fighter available starting Android 8.0 Oreo Ohio to be able to run it. I know I mentioned briefly the new memories with headers to use the typical DMS as a standalone tool. It was built on the eclipse platform. Kristen was notified Vig at some point. Where did is back in jail,
and I was pretty much the only good where you could see whether or not you're allocating memory in the wrong places one since when you're enjoying all the food chain link and now it's part of again studio. So when you see this graph that shows you in real-time the name or use that you can even see the heat a home that you needed me more using a photographic memory you using to can pinpoint where the pain is coming from. You can also create a slice as you see on screen and we'll show you all the applications during that time. You can see the sex races you can fold the
references you don't have to dump file. Do you have to use he doesn't do everything yet. So sometimes you still have to go to Jay house, but it's a very good way to get started shift memory issues inside your application. Love design used to be like this you talk to Chloe design. It's interesting. Cuz when Android came out, it was very hard to convince everyone to move to XML. Remember a lot of angry developers really wanted to write to Bill Wy and now he's giving you this so this is
a constraint layout which one is her. And now we have a lot of angry neighbor of hers would love to use only external individual to something new just as a decoy to make yourself using this way. I think the only constant is that engineer's will be unhappy with whatever new Option you give them went to the West Wing Tool Store Houston to sneak peek of a mutual former Chanel to create animations with Nicola and John are going to show that again, I think tomorrow or Thursday to go find that talk and so we want to make it clear that
this is only the beginning there's so much more we can do we have enough time to build everything but this new motion nailed editor is what is the next step? Doing animations with visual feedback real time people feel back. He's a lot nicer than using XML. What time in language sure, so don't be so sad for doing what it was designed to do which was it was optimized for space when the G1 came out. It had a hundred and ninety-two Meg's 48 of which will 64 a very small amount of memory was actually available for applications to use so David could not
as a run time take up a bunch of memory for itself or all the above the hip and where needed to store things. So that meant that as devices got better as a memory got larger. It didn't necessarily have the capabilities to optimize in the wholesale way that we needed to at some point. They basically started from scratch on the art run time that as a as we said came out in KitKat and was default in lollipop butt back in the days. We basically had recommendations that came from that because of things like allocations being really expensive. It had to walk the Heat and find a place to put
this thing and the heat got fragmented over time, which meant that even if it had them In space there. It didn't necessarily have a lot of contiguous space in which to find a place to put that object and then collections were also really expensive you ended up you would allocate things over time and then eventually it is going to run out of memory. And when it does that when you're in the middle of an animation, you're on the UI thread and it says I need to allocate space for a bitmap can't find the space better run a GC. You're probably going to lose two or three frames just because David
needed to actually collect all the items without references anymore. So some of the recognition that we had were basically avoid allocating things whenever you can that's certainly the way that we live life inside the framework because we are your inner loop but we also recommended that application developers do that. One of the recommendations that I believe the community has seen batted around was don't use a gnomes right because they are a it turns out on a noon structure. The class structure is a whole lot bigger than an into objects, right and we use ants all over the place
because we try to minimize the amount of memory were taking out and we also try to minimize the amount of time. We're creating a new object as opposed to passing primitive types around. We also said that primitive types are cool answer cool floats are cool capital. I in a juror not so cool. Also what's not cool is auto boxing. So when you're using standard collection classes, if you have a bunch of information stored in these primitive types and they're being Autobox in and out or if you're using other patterns and approaches that cause these things to get created in the object. See in the
tools that we had like allocation tracker the time that you'd be autoboxing and causing allocations along the fly and then eventually GC kicks in and you hate yourself just a little bit more. So modern world, we now have art it is optimized for performance. It was created from the ground up not to optimize for memory, but the optimized for performance in this is performance in terms of method called stuff, but it's also a optimized for allocations and collections way faster a locations in collections for a few different reasons. One of those is it has it set aside for large object.
So instead of putting everything in the same heat and then having to find space for large objects amidst all the tiny ones it puts all the bitmaps in a separate Heap all the large objects overall. It's way easier to find information I find space for those large objects and then the small objects go in the separate keep also really cool. It can defragment doll. They could not defragment. So we would allocate overtime and eventually there wasn't enough space for that thing you needed so you get these obscure error messages where it said that it couldn't find a megabyte because there's only 48
megabytes free. Doesn't make a lot of sense Until you realize well, it's probably that the heat is fragment and we can't really do much about that. Now we can in our to defragment the heat in an earlier release. It would defragment when the application was in the background now, we can actually defragment when the applications in the foreground as well. So way better so the recommendation we have now or go ahead and allocate when necessary. It's okay. In fact if you use a gnomes I don't care. Go ahead.
Apparently you do care. So I hope you enjoy them. We still as a rule tent and not use them in a lot of framework note and apis they are they are they are sometimes but as I said, we are still the interloop. So we tend to be way more conservative than you necessarily need to be in your application code use appropriate types. I still think primitive types are really cool. But you know, what if you need to use a collection with an object type, that's okay, but be aware that these phones are still constrained devices memory may not begin a 48 or 64 Meg's available but it is
still being shared with everything else. You've been used being run on that system also batteries are really important. It's important to let that battery lasts as long as possible. If you're constantly doing things all the time, if you're constantly generating garbage in collecting a Sherrard is a lot faster at that but are still has to do the work of actually allocating and collecting and all of that stuff use his powers. I would still good to remember that the bat Uses power and that maybe you should be conservative on what you're trying to do. And also like the framework be aware of the
inner loop bottlenecks don't do things in a tight Loop and may cause performance problems with Android with started the team decided to go with the Java programming language to create applications. And there were many reasons for that one was it was an extremely popular language. They were millions of the Rippers renew how to use this language you are many excellent and free tool. So it was really helpful for the quick adoption of the Android platform over time. Will I be sometimes a little bit slow at adapting new versions of the language. We recently start supporting the job
programming language version 1.8.1, 10 full support for the current programming language. How many of you are using its right now? Right, give him up 123 almost everyone has done with more than 5 will skip a few side to announce T Plastering 2017 will work in close collaboration with jetbrains when they make sure that all tools work with Will Ferrell will cuddling and to make sure that we have access to the features. We need overall. We like it because Mexico more enjoyable to read and write and we spend so much time reading and writing does matter
examples here. They going to be hot to read but it's okay cuz you all know how to write Kathleen extensions. If you don't have to create multiple other loads of methods or Builders all the time, you can eat in line functions, which is released when you crave extensions or even when you create Graphics code for instance, Operators you can Overlook The Operators you should be quite a bit for Victor's don't do that. It's a terrible idea because it's so you
can't read message for Covenant 123. Then you can do what you can do multiple assignments in 192. This is an example of where we Destructor integers whose want to ship thing is messed king of fights in integers. We have did I classes very easy way to create all those gutters into stream in equals and hashcode so you don't have to and you don't even have to wait for you. That's the level of laziness to pick up in Florissant Astic. And finally, yes. I just want to
pull out some of the things that we make make cartoons or feeling is very smart design decisions that made in language and one of them for instance is when is Linda is the last primary function of the special send text that you can use you'll have to face the lender as a timer to the function. You can just open the Kodi vs. Intruder could right there. It looks and feels natural to one of the things were doing now one with the new apis in the platform starting with Android P. We make sure that our Jedi full disk inventions when we have a single abstract method interface will make sure that
if I wanted her to choose this interface goes at the end of the list of pollinators to that delivers can benefit from this particular featuring the language of our street Jason. So for those of you that you can cut in yet project and contains both gotten into the next class or you can convert an existing class. We have a ton of insects is the things that are missing go to Hell Tour is going to write it like pretty much in front of you and commit eat right away. It's kind of a machine when it comes to
trading Lynch X extensions again. Does it talk about your dick Wharton I think on Thursday morning about it. It's going to talk about other interesting things will so pretty This Town Guide. So just if you are still using our Jetta Guy, the one with the show falling off source code Yul party prefix in your field with m going to be happy to know that we're not doing that anymore with cutting first because we don't feel like it and also because you can't read with you is the property tax in cash in any way. We also have an internal probability guide to writing code that is meant
to be consumed by both Java developers and cutting the reverse beat that you're running Jedi code. We have guests for you that explain how you should be writing your API. So they have the use in a natural manner in both languages. And those other guys that were following libraries. Let's talk about apis. First of all layouts and Android there are bunch of them. But these are the major ones to be pulled out with overtime. First of all, there was absolute layout I and you know, it's so easy to use why wouldn't you then you just tell them you exactly where you wanted to be write
linear layout. You can just Ness those things as deeply as you want to and get the exactly that you are you looking for framelayout. It's fine, you know, you can you squint at it. It's kind of like an absolutely But you know, we can figure that out and it has a lot of flexibility there in relative layout we've heard that it's expensive. Is this something we should be using or not? So the modern world cheers that we think about absolute layout We just want to make it
clear. I'm the only reason that this is not deprecated is because if there is one important classes subclass, okay. Well we deprecated and that's about as far as we can take it because with you is an absolute layout sorry don't use that. Hopefully you're not letting our way out. It's actually fine to still use especially for simple cases. If you're deeply deeply nesting then you're deeply deeply wrong and there's a better solution. We got to go to the bottom of the slide frame layout.
It's also okay for simple use cases you need to put that one thing in there with, you know, appropriate padding and margin that's kind of what does you fuse margins correctly? You busy but don't do that. Don't do that. Don't do that accept. The problem was we never actually wrote the tools. So probably not the best layout to use for your situation unless you already wrap your head around it. Okay, there may be better Solutions out there relativelayout. We believe that constraint layout is in general better solution. I would think of it is a subset of the capabilities of
relativelayout. It has a lot of the same capabilities of relative positioning of children with respect to each other but it has way more like relative positioning to guidelines and some of the new capabilities. I've been working on the consumer to describe. These are really loud that works. And also the best thing about it is it's tightly integrated with it was written in tandem like by the same people with the tool which means the design to a works really well with that layout as opposed to well. They created the apis and the tools sort of never caught up that is not the case there. We
mention two. Oh, it's not too. I know yet. I would say it's too. Out soon. So goes into. O the talk by Jon and Nikolai this week. We'll go over some of that. Stop probably final thought on on absolutely out just to make it clear. So we have a class in the UA to keep cold adapter view. It's the Base Class phone number of widgets to least. You greet you and Gary and the old is fine for many many years the heads of shoes. They were difficult to maintain Greenview. I think it's not being used by pretty much any app for quite a while. Maybe.
Occasions. Gary is kind of like a horse has View and I'm pretty sure has been deprecated for long time in heaven certainly be looking at it for a while. So I wouldn't use it if I were you anyway for you doesn't work. So what you did at the interface between your data sets and the view itself. So one of the things you can do in your doctor is notified of you of any changes in the dataset the point that you can only notified, of course Grand changes all you can say something has changed. So absurdly enough in this view. We have a lot of good at trying to figure out what a stent.
API where you cannot tell us, so that's kind of done. We also used to tell you to follow this pattern to view holder. So the older and it's one of those things worse than a lot of people mad online about to behold there was a lot of work late and I went back and looked at it one of our old talks and using if you hold it better and would give you an extra ten frames per second when you were going to lose you on a T-Mobile G1 lot way back then anymore because you cannot get it for free anyway with a
view in the nighttime disappear from the data set and you'd like the item to fade away and the rest of the item to collapse and close the gap you can do this with leave you all you need to do is write this little bit of hood chat photo blog post about it. I think a few years ago. That was one of the West View anime times. We had a series of videos showing you how to do different ones. You was rather difficult. So instead now has a respectful of you think sexually so this is just a dumb application. The first time
he was so much easier than I was able to create different versions of the nice thing about that instead of creating multiple widgets that you can specify a layout for the city for single recyclerview to this is the same exact code which is different layout managers for the recycle have a horizontal layout for years. People asked us how to do a horizontal. Creepy eyes that you put into a ride because that was easy secret though. The easiest way is simply rotate your phone 90°, which has gotten easier with some of the system UI
improvements and one of the nice things about your sexual you. I mean you just so many things must be much better ways, you know yet but also animations become for free. So do you go into the could we just saw is this what you get is a fine-grained changes so you can tell us if an item was removed. What does it was rude when an item was I did what I said was that if you can tell us about fringes of the of items that change all you can tell us that everything has changed. This is much
better for you and for us Alright fragments in the old days. We heard that fragments were really complicated and also we would fix this thing. So we didn't necessarily have everything correct or have all the baby eyes are people needed. So we would put in improvements and we put that into the platform release and then applications could only use that with devices on that platform release. And so the modern device is don't use the platform version. We have sent sported all of that code and make all of the fixes in the sport library and
we have now deprecated fragments and their platforms. So don't use them their uses for library or Now Jetpack version of fragments. We are putting more goodness. They're so use those and also we are making continuing to make improvements. There's a talk on fragments this week tomorrow morning by Adam and Eve tomorrow. So please check that out to hear more information about things that we are doing as well as ways to use fragments. We should be a little bit easier a major one of those is the new navigation controller. So check About it sort of Builds on fragments. It doesn't depend on them.
There was no dependency, but it does build on those capabilities for creating and navigating between the screens of your application. Activities very closely related to fragments in the old days. Basically Android applications consisted of multiple activities. That was the application flow for all Android applications. We expected developers to do this and developers did this when you want to go from one sort of the screen of your app to another one you launching intent you get a new window there you have some window animation to get you there. And there you are. The new approach is
you single activities when you can it turns out that too much richer experience for the user those window animations there. Well, they're reanimating but they're not doing anything interesting. They're not doing anything that helps the user transition from one state of the application to another instead. It's basically completely separate windows that are coming into view when you can actually use single activity approaches to retain the same Chrome around the application white as well have the same action bar with a Content switching out from underneath it. Use richer
animations with your possible with either the core platform animations or fragment transactions fragment animations. So go ahead and use an activity you may have situations in your application where you have different entry points, especially if you have a deep link that someone they come into your application with then it's appropriate to have separate activities. That is the way to expose that information. Otherwise try to use a single activity fragments are not necessary for single activity applications, but they can help with this a lot especially with some of the
recent improvements there and the navigation controller stuff to advise a few years ago two thousand years ago Dianne hackborn posted this on G+. We usually get this question for an application developers where they will ask us what application architecture they should use in their application and our answer is We don't care we are not you. We don't know how your application works. We don't know the best architecture for your application. So please make your own decision. And then there's usually a follow-up
question of the day I get that but which architecture should I use? So Diane posted this to basically say this once and for all we do not care the components that we have in their the content providers the activities the services these are system-level components or not an architecture around which you build your application. So, please build the one that's appropriate for your application the new advices actually, we're happy to provide you some recommended architecture cuz it turns out the people would at least like some common advice that makes sense. And we believe that we
have that now specifically with the architecture components. We think that we have an approach that makes a lot of sense. We have apis that are easy to use and you can build around those we are not demanding that you use this please use the architecture that make sense to you. But we do have a core architecture that we believe should work if you're starting a new application if you have new developers on your team that make sense. One of the reasons that we worked with Android architecture components ways to solve hard problems. One of the hardest problems was Android lifecycle and our
answer was all you need to do is understand this diagram and memorize it and someone externally did their own version that diagram which looks like this which is actually a lot easier to understand if you look at it like this. So that's basically everything you need to know and keep in your head at all times. So the problem would be you would basically create a bunch of methods in your activity so that you could track and manage life cycle you're handling creation and starting and stopping and resuming and pausing and you're probably doing stuff and Destroy as well. You probably doing
too much in on create. You're probably having brace conditions as well as leak in your starting your stop and you're probably doing that in the pause and resume as well and you're not exactly sure why your overriding on Destroy, but someone told you you probably should that will do that as well. So in the meantime, you actually only know the lifecycle state if you override those methods we didn't give you a way to query that we know what it is internally. We're just not letting you in on the secret I said, there is no API for you to query. So you need to override all those methods and then
you end up talking too much code in there. So too much while take basically happening everywhere the new approaches. We have an object called the life cycle owner. You can ask it for a life cycle object and then you can I have the query the state if you want to know what's data lifecycle you're in. Or you can set an observer on it and then you can get call backs into this mess is this allows you to extract it into a separate play. So you're not basically bogging down activity code with all this information for you putting it where it makes sense in your application. Fortunately. We override
we subclass lifecycle honor Implement that in both fragment and appcompat activity. So in the support Library, please use these those are life cycle owners. So basically you can query them to get the life cycle and then go from there. Then we went from a model where you would have activity with basically all of this life cycle dependent logic in it to a model where the activity can be much smaller take the dog out abstracted into this other thing over there. Send a life cycle Observer on and get the call back to you want we have a similar problem going on with you and data. We have an
activity and then we have all this information about the views in there and then we have the data for the views and we need to know when the data changes we need to also track the life cycle so that we don't leak things are call things at the wrong time. So we just end up having too much stuff there. Well now you have this concept. Live data and a few model where you can put that stuff you can abstract it out of the activity. So you can put all that information out there observe that stuff. So now in the activity you should really have only information about abused and a reference to the
view model and then put all of that logic in the viewmodel accusing wipe data object is handling life cycle on its own and you can observe it way better way last buggy for data are approached our argument to you was kind of well. You're on your help. We don't we don't manage your data do whatever you want and there are lots of database Solutions out there. We have signal light in the platform. Go ahead and use it. Knock yourself out. Whatever. We don't we don't want to get into that business the new approaches. We actually
do offer something for data it built on top of SQL light, but it actually offers Bill time verification. So you're not just sending these queries down and they didn't then getting a run time. Do you can see this problem at Bill time and integration with the live data stuff that we saw earlier or you can be on your own if you if you want to we're not trying to take over your database solution. We're simply offering a better local persistent story than we had previously to make it easier for you. The overall diagram looks like this the only new element here is this idea of repository at the
pattern for basically extracting for where the data comes from. So if it comes from local or web Shouldn't matter to the rest of the people that are wearing it. So it's kind of nice to have an abstraction their data paging. So we had this thing called cursor adapter. It had some good elements of a tort did have support for a database cursor. That's nice, but it was specific to lift you and had basic other problems within efficiencies paging sizes stuff like that. We had a sink with you till which was more useful but also was really inefficient for doing things like web transactions
so we can have a new model in modern Android. We have data paging me paging Library when one. Oh this week and are good things about it. So it works with recyclerview. It handles fine-grained data changes is much more efficient uses background threads very easily. I'm you can observe changes to a dinner tray with live data. But again, we're not forcing its architecture on you. If you're using rxjava2, you can integrate with that very easily as well and flexible date of fetching option so you can specify You know the window size and when you want to get these things there are
of course always trade-offs. I find at the bad thing about dating paging is that the name is rather boring. Graphic. So when we saw the andorians Bonilla the opengl USB 1.0. We didn't even have shaders. We were doing everything with software render. There was an issue for several years. It was fast enough for the all devices. It's only when we hit the tablet from Factory to study to become an issue we used to do a lot of nine batches and I'm not I'm sure some of you have to suffer through the creation and then that she's off trying to explain how to create them. Where do
you put the black dots? Which side do they go? I still don't know to this day. Basically there was always this point of views the less efficient texture of you, but they can you take a better with the other music lease view animations or do you suppose group was hard a lot of you built applications and you are getting out of memory errors because your friend took naps and you Serebii so now this we have opengl 3.1 and 3.2 yet as you have vulkan if you want to do low-level a graphics rendering
would you have acceleration everywhere? Victor Robles at basically replaced most of all doorables in deception implications. We have small applications you want to support the supporting multiple. Dances is a lot easier if you don't need no just before and something that will know doing is the we're working with you very often the application developers turn to us for Solutions. But when the community that is you I've been building amazing labor sync all the right answer. That's the one you should be using so fun since Glide or Picasso or muddy are excellent at what they do. You
want to manage complexity Mission with Wally. You should use those will not going to be no spend time recruiting something that already exists out there and that we think is very good at what he does. So, please please use those libraries again you surprise me anymore. It's time and finally we used to tell you to profile Yorker. We used to tell you to work whenever possible when to minimize me more. No, we have better to die season 2 we have a lot of cars with a lot of Ram with a bad language is a better run time to instead what you should be
doing is providing your code in the volume work whenever possible and also minimizing memory consumption. Cuz it turns out that devices are still constrained you need to keep that in mind battery life is critical and bandwidth is precious and all of these contribute to user experience. So your user will thank you. If you are actually still being inserted about these things and getting the best performance for your application. That's appropriate we would like to thank you and there's a different way to say this. And I think we're done.
Buy this talk
Access to all the recordings of the event
Buy this video
With ConferenceCast.tv, you get access to our library of the world's best conference talks.