Улучшите Java-код, чтобы он быстрее выполнялся на Android - PullRequest
0 голосов
/ 22 марта 2019

Мой код Java очень медленно выполняется на моем устройстве Android. Я думаю, это потому, что я сделал все это в одном классе. Мне нужны рекомендации, как улучшить мой код, возможно, разделив его на разные классы. Как бы вы это сделали?

public class MainActivity extends AppCompatActivity {
    View white;
    Animation downtoup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Remove notification bar
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);

        //MovingScanSquare
        white = findViewById(R.id.white);
        downtoup = AnimationUtils.loadAnimation(this, R.anim.downtoup);

        white.setVisibility(View.VISIBLE);
        downtoup = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 0f,
                TranslateAnimation.ABSOLUTE, 0f,
                TranslateAnimation.RELATIVE_TO_PARENT, 1.1f,
                TranslateAnimation.RELATIVE_TO_PARENT, 0.f);
        downtoup.setDuration(2200);
        downtoup.setRepeatCount(-1);
        downtoup.setRepeatMode(Animation.REVERSE);
        downtoup.setInterpolator(new LinearInterpolator());
        white.setAnimation(downtoup);


        //movingscreen
        final ImageView backgroundOne =  findViewById(R.id.background_one);
        final ImageView backgroundTwo =  findViewById(R.id.background_two);

        final ValueAnimator animator = ValueAnimator.ofFloat(0.0f, -1.0f);
        animator.setRepeatCount(ValueAnimator.INFINITE);
        animator.setInterpolator(new LinearInterpolator());
        animator.setDuration(3000L);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                final float progress = (float) animation.getAnimatedValue();
                final float width = backgroundOne.getWidth();
                final float translationX = width * progress;
                backgroundOne.setTranslationX(translationX);
                backgroundTwo.setTranslationX(translationX + width);
            }
        });
        animator.start();
    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Разделение кода на разные классы пока не поможет. И довольно сложно сказать, что там происходит, не описав это. Для этого используйте один из инструментов профилирования, например, VisualVM .

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

0 голосов
/ 22 марта 2019

Для улучшения читабельности вы можете использовать разные классы. Но это не сильно улучшит производительность.

Для длительной задачи обработки используйте фоновый поток вместо того, чтобы делать это в основном потоке.

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