Share
Redfin's Android app successfully reduced image-loading failures by 90% by implementing a sophisticated image management pipeline. This technical overhaul, centered on the Fresco library, directly addressed memory constraints that previously forced users to restart the application. The solution enabled more aggressive image caching and pre-fetching, resulting in a smoother, faster experience for buyers and sellers browsing property photos.
The core issue was related to the limited Java Heap, the area of memory on an Android device where standard application data is stored. Each device sets a strict limit on this memory for each app. When users browsed through numerous high-resolution property photos, the app would quickly exhaust this available space. Once the memory was full, the app could no longer load images, often requiring a full restart to continue browsing. Initial fixes, such as only loading images currently on screen and using tools like Leak Canary to plug memory leaks, provided minor relief but did not solve the fundamental problem.
The adoption of Fresco, an open-source image-loading library, was the pivotal change. Its primary advantage is superior management of a different memory region called ashmem (Android shared memory). Unlike the Java Heap, ashmem is not managed by the standard garbage collector and is better suited for storing large objects like images.
The key breakthrough was Fresco's ability to keep decoded images in ashmem without the system prematurely freeing them. Before Fresco, if the app needed to re-display an image, it had to decode it again—a processing-intensive operation that could cause the app to lag or drop frames. Fresco uses the Native Development Kit (NDK) to manually control this memory, preventing wasteful re-decoding and keeping the user interface smooth.
The integration of Fresco transformed the user experience in two key areas: reliability and speed. The most significant metric was a dramatic reduction in load failures.
| Metric | Before Fresco | After Fresco Integration | Improvement |
|---|---|---|---|
| Image Load Failures | ~7.5 images per user | Reduced by 90% | Major Reliability Gain |
| App Restarts Required | Common for 1% of users | Significantly Reduced | Fewer Interruptions |
Furthermore, the app could now pre-load images as a user scrolled through a list of properties. This meant images were often fully rendered by the time they entered the viewport, eliminating the waiting spinner and creating a seamless browsing experience. This aggressive pre-fetching and caching directly contributed to a more efficient home-browsing process.
For anyone using a mobile app to browse real estate, performance is critical. The solution focused on smarter memory management, moving image storage away from the constrained Java Heap to the more capable ashmem region. This technical improvement translated into tangible benefits: fewer crashes, faster image loading, and a smoother scroll. Based on our experience assessment, this approach demonstrates how addressing underlying technical debt can directly enhance the user experience for buyers and sellers conducting market research on their mobile devices.






