自从学习了rxJava之后,发现可以很简单并且很简洁的实现时间的显示。
不需要通过thread获取系统时间再通过主线程更新ui,rxJava优异的线程切换能力可以帮我们完成这一功能。
下面来看具体实现的代码:
public class MainActivity extends AppCompatActivity {
public int i = 0;
private Button button1;
private Button button2;
private TextView time;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
initView();
Observable.create(new ObservableOnSubscribe<String>() {
private String format;
private SimpleDateFormat simpleDateFormat;
private Date date;
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
Schedulers.io().createWorker().schedulePeriodically(new Runnable() {
@Override
public void run() {
date = new Date(System.currentTimeMillis());
simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
format = simpleDateFormat.format(date);
emitter.onNext(format);
}
}, 0, 1000,TimeUnit.MILLISECONDS);
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
time.setText(s);
}
});
}
private void initView() {
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
time = findViewById(R.id.time);
}
}
xml布局文件中只需要一个textView控件。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/time"/>
这样就完成了时间每秒更新。