timer task strange behaviour

对着背影说爱祢 提交于 2019-12-12 03:49:54

问题


I m facing issue in fitness app after 1 hr timertask runs slow or sometimes it runs too fast like it increase 2 second simantaneously please someone suggest stable solution ..I am saving user history when ever I get new location any help is appreciated

public void reStartTimerTask(final boolean onCreate) {
        if (Validator.isNull(timer)) {
            if (preferences.isGps()) {

                IntentFilter intentFilter = new IntentFilter(Util.LOCAL_RECEIVER);
                intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
                workoutReceiver = new WorkoutReceiver();
                registerReceiver(workoutReceiver, intentFilter);
                if (!onCreate) {
                    if (!Util.isGPSEnabled(this)) {
                        displayGPSAlert();
                    }
                    if (!preferences.isTryOut()) {
                        Request.getRequest().sendRequest(Request.GET_ALL_TRACE_USER, this, this, RequestParameterBuilder.buildMapForUserId(this));
                    }
                }
            }
            timer = new Timer();
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    if (preferences.isGps()) {
                        WorkoutServiceHelper.getWorkoutServiceHelper(MainActivity.this).connect();
                    }
                    if (!preferences.isWorkoutPaused()) {
                        history.duration++;
                        history.calories = HWUtil.calculateCalorie(history, MainActivity.this);
                        history.cascadeSave();

                    }
                    if (history.duration % 5 == 0 && preferences.isTrace() && !preferences.isRequestSent()) {
                        //Sync record every five second
                        UserHistoryModel historyModel = history.loadAll();
                        if (Validator.isNotNull(historyModel)) {
                            UserHistory uh = convertUserHistoryModelToUserHistory(historyModel);
                            /*
                            don't set history pictures when tracing
                             */
                            uh.setHistoryPictures(null);
                            uh.setId(uh.getUniqueId());
                            preferences.setRequestSent(true);
                            Request.getRequest().sendJsonRequest(Request.ADD_USER_HISTORY, MainActivity.this, MainActivity.this, RequestParameterBuilder.buildJsonObjectFromUserHistory(uh));
                        }
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (getSupportFragmentManager().findFragmentByTag(TabFragment.class.getName()) != null) {
                                TabFragment tabFragment = (TabFragment) getSupportFragmentManager().findFragmentByTag(TabFragment.class.getName());
                                if (tabFragment.getCurrentFragment() instanceof UpdateListener) {
                                    ((UpdateListener) tabFragment.getCurrentFragment()).update();
                                }
                            } else if (getSupportFragmentManager().findFragmentByTag(FullMapFragment.class.getName()) != null) {
                                FullMapFragment mapFragment = (FullMapFragment) getSupportFragmentManager().findFragmentByTag(FullMapFragment.class.getName());
                                mapFragment.update();
                            }
                        }
                    });
                }
            };
            timer.scheduleAtFixedRate(task, 0, 1000);
        }
    }

whenever user starts any workout/after pause i m calling this method

来源:https://stackoverflow.com/questions/38282391/timer-task-strange-behaviour

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!