好友
阅读权限10
听众
最后登录1970-1-1
|
以下是我的源码,我只实现了开始计时和结束计时,但不知道怎么用暂停按钮和继续按钮来暂停及时和恢复计时。我试过在setOnClickListener用asyTask.wait(),但一点击线程就终止了,退出界面了。
public class MainActivity extends AppCompatActivity {
private Button startButton;//开启按钮
private Button stopButton;//停止按钮
private Button pauseButton;
private Button continueButton;
private TextView showValue;//显示数值控件
private MyAsyTask asyTask;//异步任务
public static Handler myHandler;//定义一个static类型的Handler
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton = findViewById(R.id.start);
stopButton = findViewById(R.id.stop);
pauseButton=findViewById(R.id.pause);
continueButton=findViewById(R.id.conti);
showValue = findViewById(R.id.count);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//一个任务只能执行一次,因此每次点击将开启一个新任务
Integer[] startEnd = {1, 10}; //从1输出到10
asyTask = new MyAsyTask();
asyTask.execute(startEnd);//启动任务
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
continueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
asyTask.cancel(true);//撤销任务
}
});
}
class MyAsyTask extends AsyncTask<Integer, Integer, Void> {
//对应Params, Progress, Result,均为泛型
//该方法由主线程执行,一般用来执行初始化工作
@Override
protected void onPreExecute() {
super.onPreExecute();
//让开始按钮不能被点击
startButton.setEnabled(false);
}
//该方法由开启的子线程执行,是后台功能的主体
//其参数类型由AsyncTask类的第一个泛型参数指定
//其返回值类型由AsyncTask类的第三个泛型参数指定,
//并作为onPostExecute方法的参数
@Override
protected Void doInBackground(Integer... params) {
int i = params[0];
int end = params[1];
try {
while (!isCancelled() && i <= end) {
publishProgress(i);
i++;
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
//该方法由主线程执行,
// 一般是doInBackground通过publishProgress方法间接调用
//其参数由AsyncTask类的第二个泛型参数指定
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
showValue.setText("当前已经运行" + values[0] + "秒");
}
//该方法由主线程调用,一般用于最后收尾工作。
//其参数类型由AsyncTask类的第三个泛型参数指定
//其值为doInBackground方法的返回值
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
startButton.setEnabled(true);
}
//该方法由主线程调用
//cancel方法被调用时,该方法将会被调用,
//而onPostExecute方法将不再被调用。
@Override
protected void onCancelled() {
super.onCancelled();
startButton.setEnabled(true);
}
}
} |
-
运行界面
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|