andriodstudio1. 完成一个秒表,具备启停功能 2. 通过绑定服务实现功能,通过Thread+handler更新界面
时间: 2024-12-17 11:19:46 浏览: 4
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
5星 · 资源好评率100%
在Android Studio中创建一个简单的秒表应用,你可以按照以下步骤进行:
1. **启动和停止秒表**:
- 首先,你需要在布局文件中添加开始/暂停按钮,以及显示时间的TextView。在Activity中,创建两个Button实例并设置它们的OnClickListener。
- 使用`CountDownTimer`类来管理计时过程,当用户点击“开始”按钮时,初始化一个CountDownTimer,给定总秒数为0,然后启动它。当到达0后,停止计时。
- 点击“暂停”按钮时,如果计时器正在运行,则调用`stop()`方法。如果已停止,再次调用`start()`。
```java
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// 更新秒数并在UI线程更新时间显示
runOnUiThread(() -> timeTextView.setText("剩余秒数"));
}
};
countDownTimer = new CountDownTimer(Long.MAX_VALUE, 1000) { // 1000毫秒等于1秒
@Override
public void onTick(long l) {
if (isRunning) {
totalSeconds++;
timerTask.run();
}
}
@Override
public void onFinish() {
isRunning = false;
stopTimer();
}
};
```
2. **绑定Service和更新UI**:
- 创建一个新的Service,在其中处理计时任务。在Service中,你可以继续使用Handler来与主线程交互,并通过`Handler.sendMessage()`发送消息更新UI。
- 在MainActivity中,使用`bindService()`方法将Service与活动绑定。当Service的状态发生变化时,通过BroadcastReceiver监听并传递到Activity更新UI。
```java
// Service部分
final Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
timeTextView.setText(String.format("%d秒", totalSeconds));
}
};
// Activity部分
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
// 当Service状态改变时,解绑并重新绑定
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyServiceBinder binder = (MyServiceBinder) service;
binder.registerUiHandler(handler);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// 解绑
}
};
bindService(serviceIntent, serviceConnection, BIND_AUTO_CREATE);
```
阅读全文