如何将我的代码变成异步任务?

时间:2014-11-02 05:13:24

标签: java android

我正在尝试创建一个按钮,一旦点击就转到另一个活动FourthActivity,但我一直在我的Logcat上收到以下错误:“编舞:跳过121帧!应用程序可能做了太多工作它的主线。“我做了一点研究,发现使用AsyncTask可以摆脱它,但我不知道该怎么做。谁能帮我?谢谢!

以下是ThirdActivity.java的代码:

package elena.crosscountry.app;

    import android.app.Activity;
    import android.widget.Button;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.content.Intent;


    public class ThirdActivity extends Activity implements View.OnClickListener {

        Button staart;

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

            staart = (Button) findViewById(R.id.staart);
            staart.setOnClickListener(this);
        }

        private void staartClick(){
            startActivity(new Intent(ThirdActivity.this, FourthActivity.class));
        }

        public void onClick(View view){
            switch(view.getId()){
                case R.id.staart:
                    staartClick();
                    break;
            }
        }


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.third, menu);
            return true;
        }

    }

以下是activity_third.xml的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ThirdActivity" >

    <Button
        android:id="@+id/staart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/start" />

</LinearLayout>

1 个答案:

答案 0 :(得分:2)

AsyncTask是一个类,您可以使用它来进行冗长的背景计算,然后将结果传达给您,例如:

  • 下载文件
  • 计算长数学公式

使用AsyncTask启动活动不是您要做的事情。如果您在启动活动时收到该消息,则可能是其构造函数中的新活动,onCreate和onStart是阻塞UI的活动。请注意,当您开始活动时,会发生很多事情:

  • 新活动:Constructor - &gt; onCreate - &gt; onStart - &gt; onResume
  • 旧活动:OnPause - &gt; (也许)onStop - &gt; (也许)onDestroy
  • 更糟糕的是,垃圾收集器经常在这些步骤之间的任何时候发挥作用,并且当发生这种情况时,UI实际上停止了(短)。您可以在logcat中看到它,例如“GC,释放xxxxKb,停止100ms

所有这些都是顺序且非常快地发生的。 Choreographer是主要的android循环,它告诉你它在这个过程中被堵塞并丢失了一些帧。

这还取决于手机/平板电脑硬件:旧硬件在停止/启动活动时很容易被淹没。如果您可以控制新活动,只需确保它在初始化时不会太重。