gpt4 book ai didi

处理多线程的 Android Activity

转载 作者:行者123 更新时间:2023-11-29 14:55:23 25 4
gpt4 key购买 nike

在我的 Activity 课上,我想执行一系列长时间的计算,当我按下一个按钮时,这些计算需要大约 5 秒才能完成。因此,为了做到这一点,我创建了一个新类,它在其 run 方法中执行所有计算(因为它实现了 Runnable),完成后我将一个变量设置为 true 以表明这一点。在检查按钮是否被按下的代码中,我启动了一个新线程,在其中传递我的类,然后检查 run 方法是否已完成。如果它完成了我然后打印数据。这样做的问题是,当我检查计算是否已经完成时,它们实际上还没有完成,所以它通过了那行代码并且从不打印数据。我曾尝试使用异步类方法,但我认为它仍然行不通。有没有办法在我按下按钮时创建线程并继续检查是否已完成以便我可以打印数据? Activity 中的哪段代码实际上会被反复执行?感谢您提供任何信息。

if(v.equals(this.button)) {
EditText param1 = (EditText)findViewById(R.id.param1);
EditText param2 = (EditText)findViewById(R.id.param2);

calculations = new MathCalc(param1.getText().toString(), param2.getText().toString());

new Thread(calculations).start();

while(!calculations.isReady());

Intent intent = new Intent(this,Show.class);
intent.putExtra("show1", calculations.getResult());
startActivity(intent);

}

这是我想要实现的。

最佳答案

AsyncTask 是执行此操作的正确工具。 AsyncTask 的典型用例是您想在后台做一些小事,并在任务完成之前、期间和/或之后通过 UI 留下反馈。

请注意,如果用户经常退出并重新启动您的 Activity,那么在后台运行的东西会给您带来麻烦,因为当 Activity 从屏幕上移除时,后台任务不会结束。

下面显示了一个示例 Activity 。您可以将 onPreExecuteonProgress 方法添加到 AsynchTask,以便在计算之前和期间向用户提供反馈。

    public class CalcActivity extends Activity {
private Button button;
private TextView resultView;

public void onCreate() {
button = (Button) findViewById(R.id.my_button);
resultView = (TextView) findViewById(R.id.result);
button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
button.setEnabled(false);
AsyncCalculation calc = new AsyncCalculation();
calc.execute();
}
});
}

public class AsyncCalculation extends AsyncTask<Void, Void, Integer> {

@Override
protected Integer doInBackground(Void... params) {
int result = 0;
// Do some calculation
return result;
}

@Override
protected void onPostExecute(Integer result) {
// Set the result, start another activity or do something else
resultView.setText("The result was " + result);
button.setEnabled(true);
}

}

}

关于处理多线程的 Android Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com