Runnable未运行

时间:2018-03-16 19:57:13

标签: java android handler runnable

我正在编写一个程序,用一定量的迭代计算pi。我希望能够计算出这需要多长时间以及使用多少功率。我有这个应用程序的另一个版本完美的工作,但使用相同的代码,这个版本不会。 大多数代码工作正常但是powerRunnable代码在调用时没有执行。 有什么想法吗?

public class MainActivity extends AppCompatActivity {
//GUI
TextView piResultTextView, timeResultTextView,
        powerResultTextView, voltageTextView, averageCurrentTextView;
EditText piEditText;
Button calculateButton, stopButton;
TextView countView;

//GLOBAL VARIABLES
Results results;

Handler powerHandler = new Handler();
Runnable powerRunnable = new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplicationContext(), "here", Toast.LENGTH_SHORT).show();
        long millis = System.currentTimeMillis() - results.initialTime;
        timeResultTextView.setText(getString(R.string.display_time, millis));

        double current = getCurrent();
        results.totalCurrent += current;
        results.count++;

        double power = current * results.voltage;
        results.powerConsumption += power;


        countView.setText(String.valueOf(results.count));


        powerHandler.postDelayed(this, 1);
    }
};

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

    piEditText = findViewById(R.id.PiEditText);
    calculateButton = findViewById(R.id.CalculateButton);
    calculateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!empty()) {
                results = new Results(getVoltage());
                results.initialTime = System.currentTimeMillis();
                powerHandler.postDelayed(powerRunnable, 0);

                calculatePi(piEditText.getText().toString());
                finalizeResults();
                displayResults();
            }
        }
    });
    stopButton = findViewById(R.id.StopButton);
    stopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            piResultTextView.setText("");
            timeResultTextView.setText("");
            powerResultTextView.setText("");
            voltageTextView.setText("");
            averageCurrentTextView.setText("");

            powerHandler.removeCallbacks(powerRunnable);
        }
    });
    piResultTextView = findViewById(R.id.PiResultTextView);
    timeResultTextView = findViewById(R.id.TimeResultTextView);
    powerResultTextView = findViewById(R.id.PowerResultTextView);
    voltageTextView = findViewById(R.id.VoltageTextView);
    averageCurrentTextView = findViewById(R.id.AverageCurrentTextView);

    countView = findViewById(R.id.CountView);
}

@Override
public void onPause() {
    super.onPause();
    powerHandler.removeCallbacks(powerRunnable);
}

public void finalizeResults() {
    results.endTime = System.currentTimeMillis();
    powerHandler.removeCallbacks(powerRunnable);
    results.powerConsumption *= 1000;
}

public void displayResults() {
    piResultTextView.setText(results.pi);
    timeResultTextView.setText(getString(R.string.display_time, results.getTime()));
    powerResultTextView.setText(getString(R.string.display_power, results.powerConsumption));
    voltageTextView.setText(getString(R.string.display_voltage, results.getVoltage()));
    averageCurrentTextView.setText(getString(R.string.display_current, results.getAverageCurrent()));
}
}

1 个答案:

答案 0 :(得分:0)

我尝试在我的应用程序中使用您的部分代码:

Handler powerHandler = new Handler();
Runnable powerRunnable = new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplicationContext(), "here", Toast.LENGTH_SHORT).show();
        powerHandler.postDelayed(this, 1);
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);

    powerHandler.postDelayed(powerRunnable, 0);
}

它的工作。