我正在尝试理解AsyncTask类,我写了一个简单的代码,它以非优化的方式计算数字是否为Prime。我不想计算主线程中的主要问题,所以我实现了以下类:
private class PrimeTask extends AsyncTask<Integer, Void, String>{
public String isPrime(Integer n){
for(int i=2; i<n-1; i++){
if(n%i==0){
return "Not Prime";
}
}
return "Is Prime";
}
@Override
protected String doInBackground(Integer ... num){
return isPrime(num[0]);
}
@Override
protected void onPostExecute(String result){
output.setText(result);
}
}
每次用户按下MainActivity中的按钮时,我都会计算此任务。
output = findViewById(R.id.Ouput);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText input = findViewById(R.id.Input);
//output.setText(isPrime(Integer.parseInt(input.getText().toString())));
PrimeTask task = new PrimeTask();
task.execute(Integer.parseInt(input.getText().toString()));
}
});
但是当我运行应用程序时,我仍然收到以下消息!
I/Choreographer: Skipped 57 frames! The application may be doing too much work on its main thread
为什么我仍然有这条消息?我做错了吗?