crashcrash-reportsgoogle-play-consolegoogle-ranking

Android Vitals “Bad Behaviour” Flags


Google Play recently released the “Android Vitals” feature in the Google Play Console whereby they present analytic information about the released app.

The Android Vitals tab contains analytic information like crashes, ANR, multi-crashes, Slow Rendering, Frozen Frames, etc. They also show “bad behaviour” metrics whereby they compare the analytics of your app with benchmarks. If your app gets flagged with bad beahviours flags, then supposedly it can impact your rankings/downloads etc.

Is anyone else experiencing bad behaviour flags in their app on google play? Has anyone else seen a dramatic decrease in organic traffic since the Android Vitals tab was introduced? Does anyone have any advice on how to best solve these “bad behaviour” flags considering our Apps are developed with AS

Thanks in advance

bad behav image

installs

java.lang.NullPointerException: 

  at com.mydemoapp.player.activity.Dashboard$37.subscribeActual (Dashboard.java:2033)

  at io.reactivex.Observable.subscribe (Observable.java:10179)

  at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run (ObservableSubscribeOn.java:39)

  at io.reactivex.Scheduler$1.run (Scheduler.java:134)

  at io.reactivex.internal.schedulers.ScheduledRunnable.run (ScheduledRunnable.java:59)

  at io.reactivex.internal.schedulers.ScheduledRunnable.call (ScheduledRunnable.java:51)

  at java.util.concurrent.FutureTask.run (FutureTask.java:237)

  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:272)

  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)

  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)

  at java.lang.Thread.run (Thread.java:761)

--

private Observable<ArrayList<HashMap<String, String>>> provideSongListOberservable() {
        return new Observable<ArrayList<HashMap<String, String>>>() {
            @Override
            protected void subscribeActual(Observer<? super ArrayList<HashMap<String, String>>> observer) {

                File home = new File(MEDIA_PATH);
                String[] values = getResources().getStringArray(R.array.array_songs);
                ArrayList<HashMap<String, String>> songsList = new ArrayList<>();

                if (home.listFiles(new FileExtensionFilter()).length > 0) {
                    for (File file : home.listFiles(new FileExtensionFilter())) {
                        try {
                            HashMap<String, String> song = new HashMap<>();
                            song.put(KEY_SONG_TITLE,
                                    values[Integer.parseInt(file.getName().split("_")[1].substring(0,
                                            (file.getName().split("_")[1].length() - 4))) - 1]);
                            song.put(KEY_SONG_PATH, file.getPath());

                            // Adding each song to SongList
                            songsList.add(song);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }

                observer.onNext(songsList);
            }
        };
    }

Solution

  • An "App crashing" bad behavior means your app is crashing a lot.

    Google Play has publicly said (eg this talk) that it will use bad behavior as a signal when deciding which how to order apps in search results, and choose which apps to promote.

    In order to fix this - get your development team to make crash fixing a priority, not just adding new features. Use the crash reports in the Play console to find out the bugs in your app, and fix them.