首页 > 解决方案 > 移动 Seekbar 不流畅

问题描述

我有 Seekbar,我实现的源代码如下:

        seekProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            adjustCombination(progress);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

因为 function:adjustCombination(progress) 需要 0,2s 才能完成执行,所以当我移动 Seekbar 时,它并不顺利。那么我该如何解决这个问题呢?

标签: androidperformanceandroid-seekbar

解决方案


您可以像这样使用 AsyncTask 执行后台任务,

seekProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            new getData().execute(progress);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

现在,您必须定义 getData() 来执行和传递您需要的参数。在你的情况下,我们必须通过进度,

private class getData extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... progress) {
        // perform operation you want with String "progress"
        String value = "hello" + progress;
        return value;
    }

    @Override
    protected void onPostExecute(String progressResult) {
        // do whatever you want in this thread like
        // textview.setText(progressResult)
        super.onPostExecute(progressResult);
    }
}

因此,PreExecute 方法将在后台执行任何任务之前执行,然后您的 doInBackground 方法将被调用,并且在 doInBackground onPostExecute 方法将被调用后,您将在此方法中传递参数,该方法将接收从 doInBackground 方法返回的结果。我希望你能明白。


推荐阅读