【问题标题】:Android Coin-Toss Simulator LaggingAndroid 掷硬币模拟器滞后
【发布时间】:2012-03-06 03:24:23
【问题描述】:

好的,我是 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);

  }
}

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

【问题讨论】:

  • 小贴士,不要在循环内创建new Random()。创建一次。
  • 循环动作慢吗?还是整个应用程序变慢了?
  • 我想我找到了问题所在。问题是我让它在循环中设置文本。我对其进行了更改,以便现在将其设置在循环之外。
  • 如何在循环之外创建一个随机的循环以供循环使用?

标签: android performance random


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多