为什么Thread首先进入睡眠状态并稍后在Activity中设置TextView?

时间:2016-10-30 11:38:49

标签: android async-await

这是代码,例如在Android第一个活动中的结果集,其中包含3 EditText和3 Button s或TextView的UI。我需要在第二TextView中设置值以显示从前3 EditText计算的总标记,并在主方法中休眠10秒而不使用线程,但我得到操作,即在睡觉10秒后立即显示总TextView并导航到下一个活动,即在代码中提到,以便如何在设置总数后等待10秒

  EditText etMarkOne,etMarkTwo,etMarkThree;
  TextView tvTMarks,tvTotal,tvGrade;
  int m1,m2,m3,Tmarks;

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

  private void eventHandlingonViewControls(){
      tvTotal.setOnClickListener(this);
  }

  private void inilizeViewControls() {
     etMarkOne = (EditText) findViewById(R.id.etMarkOne);
     etMarkTwo = (EditText) findViewById(R.id.etMarkTwo);
     etMarkThree = (EditText) findViewById(R.id.etMarkThree);
     tvGrade = (TextView) findViewById(R.id.tvGrade);
     tvTMarks = (TextView) findViewById(R.id.tvTMarks);
     tvTotal= (TextView) findViewById(R.id.tvTotal);
  }

@Override
public void onClick(View v) {
    m1 = Integer.parseInt(etMarkOne.getText().toString());
    m2 = Integer.parseInt(etMarkTwo.getText().toString());
    m3 = Integer.parseInt(etMarkThree.getText().toString());
    Tmarks = m1 + m2 + m3;
    tvTMarks.setText(""+Tmarks);

    Thread.sleep(2000);
    Intent i = new Intent(MainActivity.this,ResultActivity.class);
    i.putExtra("Tmarks",Tmarks);
    i.putExtra(" m1", m1);
    i.putExtra(" m2", m2);
    i.putExtra(" m3",m3);
    startActivityForResult(i,1);
}

}

1 个答案:

答案 0 :(得分:0)

您可以使用Handler执行任务(postDelayed()中的10000表示10秒= 10000毫秒):

Handler handler = new Handler();

// do work before delay  here
...

handler.postDelayed(new Runnable() {
    public void run() {
        // do work after delay here
        ...
       }
   }, 10000);