Android Coin-Toss模拟器滞后

时间:2012-03-06 03:24:24

标签: android performance random

好的我是Android编程的新手,但我创建了一个应用程序,如下所示。

package com.michaelpeerman.probability;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;

public class ProbabilityActivity extends Activity
{
  private EditText number;
  private Button submit;

  public void flipcoin(int numberint)
  {
    TextView result = (TextView)findViewById(R.id.result);
    int heads = 0;
    int tails = 0;
    for (int j = 0; j < numberint; j++)
    {
      int i = 1 + new Random().nextInt(2);
      if (i == 1)
        heads++;
      if (i == 2)
        tails++;
      result.setText("heads : " + heads + "\ntails : " + tails);
    }
  }

  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(R.layout.main);
    submit = ((Button)findViewById(R.id.submit));
    submit.setOnClickListener(new View.OnClickListener()
    {
      public void onClick(View paramView)
      {
        number = ((EditText)findViewById(R.id.number));
        int numberint = Integer.parseInt(number.getText().toString());
        flipcoin(numberint);
      }
    });
  }
}

但与

相比,这个速度非常慢
package com.michaelpeerman.probability;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;

public class ProbabilityActivity extends Activity
{


  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(R.layout.main);


        TextView result = (TextView)findViewById(R.id.result);
        int heads = 0;
        int tails = 0;
        for (int j = 0; j < 50000; j++)
        {
          int i = 1 + new Random().nextInt(2);
          if (i == 1)
            heads++;
          if (i == 2)
            tails++;
          result.setText("heads : " + heads + "\ntails : " + tails);

  }
}

我不明白为什么会这样。它们都使用相同的代码,但第一个代码允许您输入数字并在运行循环之前按提交。 他们不应该是相同的速度?我该怎么做才能加快速度?

1 个答案:

答案 0 :(得分:0)

首先,应用程序滞后于您提供的任何输入,或者仅适用于特定值。正在进行的唯一额外计算是从字符串到int的转换,这不应导致它滞后。由于内存分配或未捕获的异常的某些问题,可能存在该问题。如果您在模拟器上运行日志,是否可以发布日志。