Putting pixels on the screen involves four primary pieces of hardware. To greatly simplify, the CPU computes display lists, the GPU renders images to the display, the memory stores images and data, and the battery provides electrical power. Each of these pieces of hardware has constraints; pushing or exceeding those constraints causes your app to be slow, have bad display performance, or exhaust the battery.
To discover what causes your specific performance problems, you need to take a look under the hood, use tools to collect data about your app execution behavior, surface that data as lists and graphics, understand and analyze what you see, and improve your code.
Android Studio and your device provide profiling tools to record and visualize the rendering, compute, memory, and battery performance of your app.
Note: While profiling an app, you should disable Instant Run. There is a small performance impact when using Instant Run and a slightly larger impact when updating methods. This performance impact could interfere with information provided by performance profiling tools. Additionally, the stub methods generated while using the feature can complicate stack traces.