Home » My device is getting slow, apps start misbehaving/crashing. What can I do?

My device is getting slow, apps start misbehaving/crashing. What can I do?


A behavour as described above in most cases indicates something’s messed up in the system. The most likely candidates here are:

  • Application Cache
  • Dalvik Cache

As you might have guessed already, different solutions are available for rooted devices — but only few for non-rooted devices, which cannot directly access the Dalvik Cache. So read on below examples until you hit something working for you, or continue to the very end for all options.

rooted and non-rooted devices: remove obsolete apps

Cause of a slow-down might be some app, hogging all resources. Those apps usually can be identified via the “battery consumption” page in Settings. But even if you cannot find it there, it cannot hurt to remove apps you once installed but no longer need (see e.g. Alix’ answer).

You can also disable some system apps you don’t need (keyword: bloatware). To do so, go to Settings → Applications, select the “All” tab, and walk the list to find those apps. Tap their entry, and you should find a “disable” button. It might be grayed out: if so, you first have to “force stop” the app, and maybe to “uninstall updates”, before the “disable” button becomes accessible. Note however, that this possibility will not exist for all system apps. For rooted devices, there are several tools available allowing you to “freeze” or even remove system apps (be very careful with the latter); one famous example is Titanium Backup.

rooted and non-rooted devices: Clear the Application Cache

If you’re lucky, it’s simply that: the Application Cache got filled/messed up. This can be easily resolved, even on non-rooted devices:

  • With methods available by default on each Android system:
    • From your homescreen, go to Settings → Apps → Manage Apps. Make sure to view All Apps, not Downloaded only
    • Walk the list, open each app, and hit the Clear Cache button
  • Easier method using helper apps: There are several apps available on the Playstore which allow to clean all application’s caches at once, so you don’t have to walk a long list and do it manually. One example for such an app is 1Tap Cleaner, which also can clean up several other histories like e.g. the browser history

rooted devices: Clear Application Cache and Dalvik Cache

Even more likely for the described case is a messed-up Dalvik Cache — especially if you tested a lot of apps, permanently installing/uninstalling different ones. So a cleanup of the Dalvik Cache most certainly will solve the situation. As a side effect, it will certainly speed-up things. No negative side-effects are to be expected.

  • Via Custom Recovery
    This is the most effective way and sure to really do the job. This example is based on the ClockworkMod Recovery, which is most widely spread. It should be equivalent with AmonRa Recovery.

    • Boot into recovery mode (how to do this often depends on the device/ROM used. For CyanogenMod users it’s most easy: Long-Press the power button, select “Reboot”, select “Recovery”)
    • Using the Volume controls, select Wipe Cache and approve it using the power button. On the next screen, approve the action the same way. This way you easily clear the Application Cache as described above, all at once, without the need of an extra app.
    • Go to the Advanced menu, select to Clear Dalvik Cache the same way with the Volume and Power keys and approve it.
    • Go back to the main menu, and select Reboot. The next reboot will take longer as usual, so don’t worry: Android needs to rebuild the Dalvik Cache, that’s completely normal behaviour.
  • Helper apps:
    Several apps offer options to cleanup the Dalvik Cache (e.g. SystemCleanup and Titanium Backup PRO Key ★ root). You can try those; but I’m not sure if one of them really “wipes” the Dalvik Cache. At least for Titanium Backup I know it only removes remains from uninstalled apps (i.e. obsolete Dalvik files).

rooted and non-rooted devices last resort: Factory Reset

If none of the above does solve your problem, there’s always the Factory Reset. Basically, this does all the above (wiping Application Cache and Dalvik Cache) — but it also wipes the /data partition. This means: All your settings and data (except those stored on your sd card) as well as all apps you installed yourself are gone. So be sure to have a good backup before doing this (see e.g. Full Backup of non-rooted devices for how to achieve this).

rooted devices: fstrim

Another reason for slowing things down lies in the storage. A little background for understanding:

On the flash memory used in our devices, each cell can only be written so many times. To prevent capacity loss and wear-out, the flash controller applies an algorithm called “wear leveling” to evenly spread writes across the medium. Of course, to prevent data loss you want to write to “empty places” only (except when explicitly overwriting a file). And here comes the culprit: To speed things up, the file system in most cases only marks files deleted, but doesn’t tell the controller about the “freed blocks” — so it becomes inefficient with time.

Android 4.3 addresses this issue with appropriate fstrim calls, telling the controller once a day which blocks to consider freed. Some ROMs integrated a comparable feature also in earlier versions of Android, mounting file systems with the discard option (so the controller is informed at once on deletes), but this slows down deletes a little. For devices not having addressed this in either of the two ways, it might be worth to take a look at the Lagfix App, which calls fstrim in a user-friendly way for selected partitions. Running that once on a long-used device may speed up writes by a factor of up to 30, and even reads get a little faster.


  • Speedup values: Android-Hilfe.DE
  • Greatly improve speed and performance of your smartphone or tablet with LagFix
  • Nexus Storage Performance Over Time & TRIM 20130727

My HTC One V was getting so slow that I was getting ready to smash it. After trying everything with nothing working, I went through my apps and deleted a few. Apparently the one causing all the trouble was You Don’t Know Jack. The second it was off my phone my speed dramatically increased and started functioning normally again. Not sure if this will help anyone else, but on the off-chance it does, I just wanted to let you know.

How to Speed up Slow Android

Remember the day you bought your android? It wasn’t slow. It was so fast. What happened? Did the silicon get slower? Did the bits get clogged? Of course not. You’re just running more invisible background services.

First, disable auto updates in

  • Samsung galaxy store (if applicable),
  • in settings > software updates,
  • In secret developer options menu (look it up)
  • and Google play store

This is important because otherwise they just reinstall / update themselves.

screenshot screenshot screenshot

Then look for apps that open automatically after removing them from via device maintenance > clear memory & developer options > running services and uninstall or reset them to factory default to as many as you can (I also remove permissions from them so they cant read from storage secretly in the background etc.). Some system apps you may want to keep, such as Google play services etc. Just uninstall the ones you are confident you understand are not needed

Remember, clearing the memory does NOT speed up the device, it only shows you what apps autoload background processes so you can uninstall them. A good example of this is Instagram, if you notice it keeps running while it’s closed, because it will preload dozens of Instagram videos in your feed before you even open the app. While preloading is generally seen as an optimization, if you have enough apps aggressively preloading at the same time, and security apps monitoring those apps, and RAM filling up which then kicks off garbage collection on the Java runtime, and possibly even memory paging, plus any activity you actually request, plus reporting your location to Google, plus reporting your location to “find your phone” programs, plus checking traffic on your future commute, plus parsing your calendar for AI usage with Google Home, plus updates checking, plus notification querying, etc etc, then you may find that your device is doing far more activity than it can handle. Simple way to test this is to turn on Max Battery Saving option and see if the battery and responsiveness improves. If so, it’s in large part because all the extensive background processing is disallowed.

Also remember that disabling auto updates does not speed up the phone per se, it just allows you prevent future updates from causing unexpected performance degradation. It makes you the gatekeeper so your phone cannot magically slow down overtime, but rather let’s you pick and choose what apps you trust to update (and of course, update the apps you love.) It’s like Kon Mari method for your phone.

screenshot screenshot screenshot screenshot

Remember, phones don’t get slow over time. Bad programming in Updates cause phones to get slow. And this will get you back to a smooth android like the day you bought it (also good for battery)

I’ve had outstanding success with this. And my frame rate is 2x better as well as app open speed. It’s fantastic.

Oh and also enable background ANRs so you can see invisible stalls


Related Solutions

How to download package not install it with apt-get command?

Use --download-only: sudo apt-get install --download-only pppoe This will download pppoe and any dependencies you need, and place them in /var/cache/apt/archives. That way a subsequent apt-get install pppoe will be able to complete without any extra downloads....

What defines the maximum size for a command single argument?

Answers Definitely not a bug. The parameter which defines the maximum size for one argument is MAX_ARG_STRLEN. There is no documentation for this parameter other than the comments in binfmts.h: /* * These are the maximum length and maximum number of strings...

Bulk rename, change prefix

I'd say the simplest it to just use the rename command which is common on many Linux distributions. There are two common versions of this command so check its man page to find which one you have: ## rename from Perl (common in Debian systems -- Ubuntu, Mint,...

Output from ls has newlines but displays on a single line. Why?

When you pipe the output, ls acts differently. This fact is hidden away in the info documentation: If standard output is a terminal, the output is in columns (sorted vertically) and control characters are output as question marks; otherwise, the output is...

mv: Move file only if destination does not exist

mv -vn file1 file2. This command will do what you want. You can skip -v if you want. -v makes it verbose - mv will tell you that it moved file if it moves it(useful, since there is possibility that file will not be moved) -n moves only if file2 does not exist....

Is it possible to store and query JSON in SQLite?

SQLite 3.9 introduced a new extension (JSON1) that allows you to easily work with JSON data . Also, it introduced support for indexes on expressions, which (in my understanding) should allow you to define indexes on your JSON data as well. PostgreSQL has some...

Combining tail && journalctl

You could use: journalctl -u service-name -f -f, --follow Show only the most recent journal entries, and continuously print new entries as they are appended to the journal. Here I've added "service-name" to distinguish this answer from others; you substitute...

how can shellshock be exploited over SSH?

One example where this can be exploited is on servers with an authorized_keys forced command. When adding an entry to ~/.ssh/authorized_keys, you can prefix the line with command="foo" to force foo to be run any time that ssh public key is used. With this...

Why doesn’t the tilde (~) expand inside double quotes?

The reason, because inside double quotes, tilde ~ has no special meaning, it's treated as literal. POSIX defines Double-Quotes as: Enclosing characters in double-quotes ( "" ) shall preserve the literal value of all characters within the double-quotes, with the...

What is GNU Info for?

GNU Info was designed to offer documentation that was comprehensive, hyperlinked, and possible to output to multiple formats. Man pages were available, and they were great at providing printed output. However, they were designed such that each man page had a...

Set systemd service to execute after fstab mount

a CIFS network location is mounted via /etc/fstab to /mnt/ on boot-up. No, it is not. Get this right, and the rest falls into place naturally. The mount is handled by a (generated) systemd mount unit that will be named something like mnt-wibble.mount. You can...

Merge two video clips into one, placing them next to each other

To be honest, using the accepted answer resulted in a lot of dropped frames for me. However, using the hstack filter_complex produced perfectly fluid output: ffmpeg -i left.mp4 -i right.mp4 -filter_complex hstack output.mp4 ffmpeg -i input1.mp4 -i input2.mp4...

How portable are /dev/stdin, /dev/stdout and /dev/stderr?

It's been available on Linux back into its prehistory. It is not POSIX, although many actual shells (including AT&T ksh and bash) will simulate it if it's not present in the OS; note that this simulation only works at the shell level (i.e. redirection or...

How can I increase the number of inodes in an ext4 filesystem?

It seems that you have a lot more files than normal expectation. I don't know whether there is a solution to change the inode table size dynamically. I'm afraid that you need to back-up your data, and create new filesystem, and restore your data. To create new...

Why doesn’t cp have a progress bar like wget?

The tradition in unix tools is to display messages only if something goes wrong. I think this is both for design and practical reasons. The design is intended to make it obvious when something goes wrong: you get an error message, and it's not drowned in...

OpenSSH: How to end a match block

To end up a match block with openssh 6.5p1 or above, use the line: Match all Here is a piece of code, taken from my /etc/ssh/sshd_config file: # Change to no to disable tunnelled clear text passwords PasswordAuthentication no Match host

Redirecting the content of a file to the command “echo”

You can redirect all you want to echo but it won't do anything with it. echo doesn't read its standard input. All it does is write to standard output its arguments separated by a space character and terminated by a newline character (and with some echo...