I / Choreographer(12759):跳过40帧!应用程序可能在其主线程上做了太多工作

时间:2014-11-05 17:28:19

标签: java android animation

我是Android编程的新手,我最近搜索了一个对象的简单淡出动画。我把它放在我的代码中,对它进行了测试,它很不稳定。我检查了日志并看到了这个:

11-05 19:19:21.319:I / Choreographer(12759):跳过40帧!应用程序可能在其主线程上做了太多工作。

这是我在MainActivity类中的代码

private MainActivity actMain;
FadeIn fadeClass = new FadeIn();

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.view_switcher);
    actMain = this;

    new Thread() {
        @Override
        public void run() {
            // If there are stories, add them to the table
            try {
                // code runs in a thread
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        fadeClass.animation(actMain);
                    }
                });
            } catch (final Exception ex) {
                Log.i("---", "Exception in thread");
            }
        }
    }.start();

}

来自FadeIn课程:

private View view;

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

}

public void animation(Activity context) {
    final View view = context.findViewById(R.id.fadeOutLayer);
    Animation fadeOut = new AlphaAnimation(1f, 0f);
    fadeOut.setDuration(3000);
    fadeOut.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            view.setVisibility(View.GONE);

        }
    });

    view.startAnimation(fadeOut);

}

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在主线程中创建并执行新线程,并且在此新线程内部,您正在执行runOnUiThread,它与Main线程同步并在其中执行其内容。这没有任何意义,因为就像在onCreate中执行runOnUiThread的内容一样。

我建议您使用" fadeClass.animation(actMain);"直接在onActivityCreated内部

答案 1 :(得分:0)

您也可以通过简单地使用animate()方法为简单动画制作动画。可以使用alpha,旋转,缩放等动画。我举了一个翻译的例子。

mImageView.animate().translationX(-screenWidth)
    .setDuration(ANIMATION_DURATION).withEndAction(new Runnable() {

        @Override
        public void run() {
            mImageView.setImageDrawable(d);
            mImageView.setVisibility(View.INVISIBLE);
        }
});

可以在主线程上轻松完成