Debugging and Profiling Apps
Overview
(Needs Attention)
-
Analyzing Display and Performance (
systrace) -
Optimizing your View and Inspecting Hierarchy (
hierarchyviewer) -
Investigating your RAM Usage (
monitor) -
Profiling with Traceview (
traceview) - Profiling Android Apps - Performance Turning
- Vogella Android Analysis Tools
- Performance Course on Udacity
- Performance Doc from Udacity
In addition, the following concepts need to be included:
- Profiling GPU Rendering - quick visual representation of how much time it takes to render the frames of a UI window relative to the 16-ms-per-frame benchmark.
- Visualizing Overdraw - Shows on the device where an app might be doing more rendering work than necessary. Helping you see where you might be able to reduce rendering overhead.
- Heap Viewer - Identifying memory leaks
- LeakCanary for finding memory leaks easily
- Allocation Tracker - Finding the places in your code that may contribute to memory trashing.
- Batterystats - Shows where and how processes are drawing current from the battery.
- Batteryhistorian - Visualize system and application level events on a timeline. Guide to getting started
Optimizing Performance
Check out the following links regarding optimizing performance:
- Layout Performance
- ViewHolder with ListView
- Displaying Bitmaps Effectively
- Caching Bitmaps
- Android Performance Tips
- Managing App Memory
- Layout Performance Guide
- Keeping Your App Responsive
Memory Management
References
Created by CodePath with much help from the community. Contributed content licensed under cc-wiki with attribution required. You are free to remix and reuse, as long as you attribute and use a similar license.
Pages 203
- Home
- Accessing the Camera and Stored Media
- ActionBar Tabs with Fragments
- ActiveAndroid Guide
- Activity Lifecycle
- Android Bootcamp Cliffnotes
- Android Design Guidelines
- Android Directory Structure
- Android for Work
- Android Testing Framework
- Android Testing Options
- Android Unit and Integration testing
- Animations
- Applying Data Binding for Views
- Architecture of Android Apps
- Audio Playback and Recording
- Automating Publishing to the Play Store
- Basic Event Listeners
- Basic Painting with Views
- Basic Todo App Tutorial
- Beginning Android Resources
- Book Search Tutorial
- Bottom Navigation Views
- Building Data driven Apps with Firebase
- Building Data driven Apps with Parse
- Building Gradle Projects with Jenkins CI
- Building Simple Chat Client with Parse
- Building your own Android library
- Chrome Custom Tabs
- Circular Reveal Animation
- Clean Persistence with Sugar ORM
- Cloning a Login Screen Layout Guide
- CodePath Goal
- Collaborating on Projects with Git
- Common Implicit Intents
- Common Navigation Paradigms
- Communicating with an Event Bus
- Configuring a Parse Server
- Configuring ProGuard
- Connectivity using the Bluetooth API
- Constructing View Layouts
- Consuming APIs with Retrofit
- Contributing back to Android
- Contributing Guidelines
- Converting JSON to Models
- Crash Reporting with Crashlytics
- Crash Reporting with Firebase
- Creating and Executing Async Tasks
- Creating and Using Fragments
- Creating App Shortcuts in Launcher
- Creating Content Providers
- Creating Custom Listeners
- DBFlow Guide
- Debugging and Profiling Apps
- Debugging Exceptions within your App
- Debugging with Stetho
- Defining Custom Views
- Defining The ActionBar
- Defining Views and their Attributes
- Dependency Injection with Dagger 2
- Design Support Library
- Developing Custom Themes
- Displaying Images with the Fresco Library
- Displaying Images with the Glide Library
- Displaying Images with the Picasso Library
- Displaying the Snackbar
- Displaying Toasts
- Drawables
- Drawing with OpenGL and GLSurfaceView
- Dynamic Color using Palettes
- Easier SQL with Cupboard
- Effective Java for Android
- Endless Scrolling with AdapterViews
- Endless Scrolling with AdapterViews and RecyclerView
- Extended ActionBar Guide
- Extending SurfaceView
- Flexible User Interfaces
- Floating Action Buttons
- Fragment Navigation Drawer
- Free Android Curriculum
- Gallery
- Genymotion 2.0 Emulators with Google Play support
- Gestures and Touch Events
- Google Cloud Messaging
- Google Maps API v2 Usage
- Google Maps Fragment Guide
- Google Play Style Tabs using TabLayout
- Handling Configuration Changes
- Handling ProgressBars
- Handling Scrolls with CoordinatorLayout
- Hello World
- Heterogeneous Layouts inside RecyclerView
- Implementing a Heterogenous ListView
- Implementing a Horizontal ListView Guide
- Implementing a Rate Me Feature
- Implementing Pull to Refresh Guide
- Installing Android SDK Tools
- IntelliJ 2016.3.3 Android Studio Settings Configurations Config
- Interacting with the Calendar
- Intermediate
- Keeping Updated with Android
- Lambda Expressions
- Leveraging the Gson Library
- Listening to Sensors using SensorManager
- Loading Contacts with Content Providers
- Local Databases with SQLiteOpenHelper
- Managing Runtime Permissions with PermissionsDispatcher
- Managing Threads and Custom Services
- Material Design Primer
- Menus and Popups
- Migrating to the AppCompat Library
- Mobile Screen Archetypes
- motivation
- Must Have Libraries
- Navigation and Task Stacks
- Networking with the Fast Android Networking Library
- Networking with the Volley Library
- Notification Services (GeoFence, Calendar)
- Notifications
- Open Source projects for Android Development
- Organizing your Source Files
- Oscarg933
- Paging Library Guide
- Persisting Data to the Device
- Playing Media with ExoPlayer or TubiPlayer
- Polishing a UI Tips and Tools
- Popular External Tools
- Populating a ListView with a CursorAdapter
- Powerful Persistence with JDXA ORM
- Presenting an Android Device
- Progress Bar Custom View
- Publishing to the Play Store
- Push Messaging
- Push Notifications Setup for Parse
- Quickstart with Exoplayer
- Radiology app
- Real time Messaging
- Recording Video of an Android Device
- Reducing View Boilerplate with Butterknife
- Reducing View Boilerplate with ViewBinding
- Repeating Periodic Tasks
- Replacing Enums with Enumerated Annotations
- Retrieving Location with LocationServices API
- Ripple Animation
- Robolectric Installation for Unit Testing
- Room Guide
- Rotten Tomatoes Networking Tutorial
- Running Apps on Your Device
- RxJava
- RxJava and RxBinding
- Sample Android Apps
- Sending and Managing Network Requests
- Sending and Receiving Data with Sockets
- Server Synchronization (SyncAdapter)
- Setting up IntelliJ IDEA
- Setting up Travis CI
- Settings with PreferenceFragment
- Shared Element Activity Transition
- Sharing Content with Intents
- Sliding Tabs with PagerSlidingTabStrip
- Starting Background Services
- Storing and Accessing SharedPreferences
- Storing Secret Keys in Android
- Streaming Youtube Videos with YouTubePlayerView
- Styles and Themes
- Styling UI Screens FAQ
- Troubleshooting API calls
- Troubleshooting Common Issues
- Troubleshooting Common Issues with Parse
- Twitter Persistence With Room
- UI Testing with Espresso
- UI Testing with Robotium
- Understanding App Permissions
- Understanding App Resources
- Understanding the Android Application Class
- Unit Testing with Robolectric
- Using a BaseAdapter with ListView
- Using an ArrayAdapter with ListView
- Using an ArrayAdapter with ListView”
- Using Android Async Http Client
- Using Android Studio
- Using CodePath Async Http Client
- Using Context
- Using DialogFragment
- Using Intents to Create Flows
- Using Kotlin for Android development
- Using OkHttp
- Using Parcelable
- Using Parceler
- Using the App Toolbar
- Using the CardView
- Using the RecyclerView
- Video and Audio Playback and Recording
- Video Playback and Recording
- View Hierarchy Animations
- ViewPager with FragmentPagerAdapter
- Working with Input Views
- Working with the EditText
- Working with the ImageView
- Working with the ScrollView
- Working with the Soft Keyboard
- Working with the TextView
- Working with the WebView
Finding these guides helpful?
We need help from the broader community to improve these guides, add new topics and keep the topics up-to-date. See our contribution guidelines here and our topic issues list for great ways to help out.
Check these same guides through our standalone viewer for a better browsing experience and an improved search. Follow us on twitter @codepath for access to more useful Android development resources.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
