Skip to main content
ANR and how should we resolve that?

ANR ,do you know how to fix it?

Where To Look For ANR?

  • The app is doing slow operations on main thread. (Including I/O)
  • App is doing a long calculation on main thread.
  • The main thread is doing a synchronous binder call to another process and that process is doing a heavy job.
  • The main thread is blocked waiting for another process which is doing a long job.
  • The main thread is in a deadlock with another thread.

Fixes

  • StrictMode is a developer tool which detects things you might be doing by accident and brings them to your attention so you can fix them. StrictMode is most commonly used to catch accidental disk or network access on the application's main thread, where UI operations are received and animations take place. Keeping disk and network operations off the main thread makes for much smoother, more responsive applications. By keeping your application's main thread responsive, you also prevent ANR dialogs from being shown to users.
  • Developer Options Actually not all ANR’s are shown to user. But at Developer Options of Settings, there is an option “Show All ANRs”. If this option is selected, Android OS will show you internal ANRs also.
  • TraceView Android Studio has an inbuilt tool called TraceView. You can see memory and CPU usage of your app. For how to user TracevView, please refer to here.
  • Inspect Traces File When ANR happens, Android logs some info related to the case in a txt file on device itself. You can use ADB to gather logs and have a look. Just use theese commands.

Comments

Popular posts from this blog

How will you track foreground and background events in android? Implementing a Foreground and Background Handler First, lets create our interface that will be implemented by a custom Application class. Something as simple as this: interface LifecycleDelegate { fun onAppBackgrounded() fun onAppForegrounded() } we could use onTrimMemory and the TRIM_MEMORY_UI_HIDDEN flag to detect background events. So lets do that now. Add this into the onTrimMemory method callback body if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { // lifecycleDelegate instance was passed in on the constructor lifecycleDelegate.onAppBackgrounded() } So now we have the background event covered lets handle the foreground event. To do this we are going to use the onActivityResumed. This method gets called every time any Activity in your app is resumed, so this could be called multiple times if you have multiple Activities. What we will do is use a flag...
Have you ever used Room how to implement room db? Room is an ORM, Object Relational Mapping library. In other words, Room will map our database objects to Java objects. Room provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite. Database : This component represents data holder. The annotated class should be an abstract class that extends RoomDatabase. At runtime, you can acquire an instance of it by calling Room.databaseBuilder() or Room.inMemoryDatabaseBuilder(). DAO : DAOs are the main component of Room and are responsible for defining the methods that access the database. All queries are written in DAO only. IEntity : This component represents a database row of table. Each field of the entity is persisted in the database unless you annotate it with @Ignore . Difference between room and sqlite In case of SQLite, There is no compile tim...