A blog site for teams who care about building great apps

App Diets are not a Fad

In our last post we explored an architecture/library selection that would lead to nearly perfect startup times. Today I wanted to explore another type of performance optimization: APK size. A smaller APK results in faster resource lookup and faster reflection. Image optimization, an important way to cut down APK size,...

Read More
Eight Ways Your Android App Can Leak Memory

One advantage of a garbage-collecting-language like Java is that it removes the need for developers to explicitly manage allocated memory. This reduces the likelihood of a segmentation fault crashing the app or an unfreed memory allocation bloating the heap, thus creating safer code. Unfortunately, there are other ways that memory...

Read More
NimbleDroid Product Update, May 2016

This month we’ve been primarily focused on improving the more hidden parts of NimbleDroid, as well as laying the groundwork for some exciting features coming next month. For now, here are a couple of visible product updates. Better Management of Uploads We have a number of users who have been...

Read More
Five Common Issues That Slow Down Your App

In the last couple of months, we’ve been describing a handful of common issues that slow down your Android app based on our analysis using NimbleDroid. We conclude this series of posts by summarizing the issues here. Java reflection. Reflection is, of course, an extremely useful aspect of Java and...

Read More
Performance Problems in Libraries and SDKs

It’s difficult to imagine modern android apps that don’t implement some external libraries or SDKs. After all, most apps have to leverage some combination of network image loading, crash tracking, advertisement, or analytics libraries and SDKs. It makes sense - developers shouldn’t have to reinvent the wheel (several wheels, actually)...

Read More
Pushing the Limits of App Startup Time

It’s easy to make a tiny app fast. It’s more challenging when you need to deal with the complexities required by most apps: data caching, json parsing, immutability, dependency injection, and a slew of support libraries.It’s still possible to minimize startup time, even when you’re following modern development practices such...

Read More
NimbleDroid Product Update, April 2016

This month we have a mix of new features, many of them focused on making NimbleDroid’s UI more enjoyable to work with. Saving App Test Credentials We’ve always allowed users to include app test credentials with the upload of their APKs, but we’ve improved on this by allowing users to...

Read More
Why Is ClassLoader.getResourceAsStream So Slow in Android?

Through our extensive analysis at NimbleDroid, we’ve picked up on a few tricks that help prevent monolithic lags in Android apps, boosting fluidity and response time. One of the things we’ve learned to watch out for is the dreaded ClassLoader.getResourceAsStream, a method that allows an app to access a resource...

Read More
Five Lesser-Known Ways to Hang Your Main Thread

By now, most Android Developers already know that the main thread of an app is the one that handles user interaction, and should consequently be considered off-limits for time-consuming work. In general, any method invocation that causes the main thread to hang for 16*N milliseconds will lead to N dropped...

Read More
NimbleDroid Product Update, Mar 2016

The past month saw more exciting features make it to production, as well as lots of updates to give our growing user base a smoother and faster experience. Memory Leaks NimbleDroid already provides identification for speed-related problems, so we’re pleased to now provide detection of memory leaks as well. We...

Read More
How Fast Do Top News Apps Start?

Two weeks ago, we presented our study of cold start times of top apps in Google Play. Meanwhile, our friends at the New York Times explained how they’ve reduced their Android app’s startup time from 5.6 seconds to just 1.7 seconds with the help of NimbleDroid, so we feel obliged...

Read More
Comparing the Performance of Dependency Injection Libraries

The dependency injection (DI) has become an increasingly popular tool in Android development, and for good reason. Injections reduce the amount you have to code (and hence, debug), facilitating the creation of better apps and a smoother development process. While it may be tempting to toss in dependencies to a...

Read More
How Slow is Reflection in Android?

(So far we’ve analyzed a lot of apps and discovered a handful of issues that significantly slow down many apps. Starting from this post, we’ll describe these issues one by one.) Reflection is, of course, an extremely useful aspect of Java and Android development. Yet it turns out that reflection...

Read More
Cold Start Times: An Analysis of Top Apps

We’ve stressed that apps need to start up quickly in a prior blog post, but how fast do existing apps start? Here we examine the startup times of the top 100 apps in Google Play and share the insights we find. Background: Three Types of App Starts There are actually...

Read More
NimbleDroid Product Update, Feb 2016

We’ve been hard at work over the past few weeks making NimbleDroid an even more powerful tool for Android developers seeking to improve the performance of their apps. In this post we’ll discuss some of the biggest changes we’ve made in this update, and then offer a quick preview of...

Read More
How to Make Your Application Fluid

In a previous blog post, we discussed the importance of monitoring your app’s performance. This time, we’ll show you exactly how to go about doing this. We’ve spoken with several developer teams from some of the most popular apps in the world, including WeChat and Yahoo News Digest, about the...

Read More
Why You Should Care about Your Android App's Performance

Android is dominating the global and national mobile app market. As a result, developers are pumping out new apps every day. As early as 2011, over 500 new Android apps were being released daily. By April 2015, the number of Android apps had reached over 1.4 million, and apps on...

Read More