Повышение производительности не удалось - PullRequest
0 голосов
/ 07 ноября 2019

У меня ANR (приложение не отвечает) . Я пытаюсь разделить задачи на потоки с помощью AsyncTask, однако это кажется хуже, чем раньше.

Я делаю что-то не так, но не могу понять, в чем проблема.

enter image description here

Как видите, основной поток занимает 6 миллионов миллисекунд, что, я думаю, не очень хорошо.

Чтобы повысить производительность, я сделал это с помощью onCreate() методов различных действий:

    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            //TODO your background code
            if(sPreferenceManager.getBoolean(Constants.SharedPreferences.UPDATE_REQUIRED))
            {

                log(Log.DEBUG,"mediaplayeractivity","UPDATE_REQUIRED");

                mViewModel.getmInteractor().updateDatabaseAfterLogin();
            }
        }
    });

AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            //TODO your background code
            initServices(savedInstanceState);

        }
    });



AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            Fabric.with(GomusApplication.this, new Crashlytics());

            //TODO your background code
            AndroidThreeTen.init(GomusApplication.this);
            initPreferences();
            sInstance = GomusApplication.this;
            initRealm();
            appComponent =  DaggerAppComponent.builder()
                    .appModule(new 
AppModule(GomusApplication.this)).build();
            appComponent.inject(GomusApplication.this);
        }
    });

Я разделил задачи на AsyncTasks . Однако это ухудшило производительность!

ОБНОВЛЕНИЕ: Я изменил свои AsyncTasks, как это, но все же я не вижу каких-либо странных улучшений:

new AsyncTask<Void, Void, Void>() {

        @Override
        protected Void doInBackground(Void... voids) {
            if(sPreferenceManager.getBoolean(Constants.SharedPreferences.UPDATE_REQUIRED))
            {

                log(Log.DEBUG,"mediaplayeractivity","UPDATE_REQUIRED");

                mViewModel.getmInteractor().updateDatabaseAfterLogin();
            }
            return null;
        }
    }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

Я также сделал некоторыеизменения макета на макетах ограничений, такие как некоторые поля, отсутствовали, и я добавил их. Я удалил несколько больших изображений, чтобы увеличить производительность.

Однако то, что я сделал, ухудшило производительность. Потребовалось 3M миллисекунды для запуска основного потока, но сейчас это 6M миллисекунд.

Мне очень жаль, я никогда не пытался увеличить производительность до сих пор, поэтому у меня нет достаточных знаний. Но я провел некоторое исследование, и люди говорят, что используют AsyncTask.

Любая помощь будет оценена.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...