【发布时间】:2013-04-19 06:07:57
【问题描述】:
我是 Android 新手,现在正在使用 AsyncTask 处理计数器。
所以问题是我只有一个按钮,并且有那个按钮OnClickListener。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
boolean check;
check=check_button_status();
if(check==true){
rec_forward_task.execute();
}
else
{
rec_forward_task.cancel();
}
}
});
所以这里的rec_forward_task 是扩展AsyncTask 的类。 AsyncTask 课程在这里。
//
private class CounterForwardTask extends AsyncTask<Void, Integer, Integer>
{
TextView record_counter_display;
int rec_counter,count;
int last_value;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
record_counter_display=(TextView) findViewById(R.id.rec_voice_counter);
rec_counter=0;
record_counter_display.setText(String.valueOf(rec_counter));
count=0;
}
public void cancel() {
// TODO Auto-generated method stub
onCancelled();
}
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
while(rec_status)
{
publishProgress(count);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
last_value=count;
count=count+1;
}
return 1;
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
record_counter_display.setText(String.valueOf(0));
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
record_counter_display.setText(String.valueOf(count));
}
});
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
record_counter_display.setText(String.valueOf(last_value));
}
}
我只是在 oncreate 方法中为该类创建对象,所以现在问题来了。
当用户第一次按下计数器开始并在文本视图中显示并再次按下相同的按钮时,计数器进度由于 oncancel 方法被调用而停止。但是如果用户再次按下相同的按钮应用程序强制关闭和异常,你无法启动已经启动的任务。请问如何执行这种操作。感谢您的回复。
【问题讨论】:
标签: android