网上科普有关“倒计时的三种解决方法”话题很是火热,小编也是针对倒计时的三种解决方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
1、方法一:
? 利用CountDownTimer类
? //这个方法中的两个参数第一个是 倒计时的时长,第二个是每次减少的时间
CountDownTimer timer = new CountDownTimer(5000,1000) {
@Override
public void onTick(long millisUntilFinished) {
//donghua_textview展示数据的控件
donghua_textview.setText(millisUntilFinished/1000+"S");
}
//动画结束时调用的方法
@Override
public void onFinish() {
startActivity(new Intent(DonghuaActivity.this, LoginActivity.class));
}
};
//最后不要忘记调用start();方法
timer.start();
2、方法二:
//利用Timer类
int mSeconds = 5;
Timer timer = new Timer();
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
if (mSeconds == 0) {
timer.cancel();
startActivity(new Intent(DonghuaActivity.this, LoginActivity.class));
} else if (mSeconds > 0) {
donghua_textview.setText(mSeconds + "S");
}
}
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {
mSeconds--;
handler.sendEmptyMessage(1);
}
};
//调用timer类中的schedule方法
timer.schedule(task, 1000, 1000);
3、方法三:
利用handler发送延迟线程
? int mSeconds = 5;
? Handler handler =? new Handler();
private void changeSeconds() {
mSeconds--;
handler.postDelayed(new Runnable() {
@Override
public void run() {
main_textview.setText(mSeconds+"S");
if(mSeconds==0){
//在这里我们开启动画不做跳转
initDonghua();
}else{
changeSeconds();
}
}
},1000);
}
//初始化动画
? private void initDonghua() {
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim);
animation.setAnimationListener(this);
main_textview.startAnimation(animation);
}
private void initView() {
main_textview = (TextView) findViewById(R.id.main_textview);
}
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//在动画结束的时候进行跳转
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
Dialog关不掉
countdown
英 ['ka?ntda?n]?
美 [?ka?nt?da?n]
n.倒数读秒,倒计时; 大事临近的时期; 准备过程,准备工作
1. the countdown to the wedding
婚礼的临近
2. If the countdown timer ever hits zero, do your validation processing.
处理这种情况的方法是在输入的同时使用递减计时器,每次击键重新计时。如果递减计时器变为零,就开始验证。
3. This is the final countdown for Newcastle Utd.
这是纽卡斯尔联队的最后倒计时了。
4. The director began the countdown ten seconds before the broadcast.
距离开播还有十秒,导播开始倒读数。
场景描述:我在A活动里,onCreate初始化了一个DIalog和一个CountDownTimer类型的计数器,并在计时器的构造中,传入当前的handler对象。计时器被我写成单例的。
然后当我点击A按钮的时候,启动Dialog和计时器,计时器倒计时5秒,发出消息,在handleMessage中,收到发送的消息,然后关闭Dialog。
第一次进入活动,点击A按钮,过5秒,收到消息然后关闭dialog,这个操作是正常的。但是当我退出当前活动
第二次进入活动,点击A按钮,过5秒,收到消息后,就关闭不掉这个dialog了。整个活动都是重新初始化的。
分析:经过一番测试之后,我发现dialog中的mShowing这个属性,在我第二次进入活动,并且dialog.show()调用之后,被修改为true。过五秒后,在handleMessage中,调用dialog.hide(),这时dialog的mShowing这个属性确是false,然后就关不掉dialog了。
如何解决:最后我是如何解决的呢,我把CountDownTimer这个计时器创建的单例给取消了,每次都重新创建一个新的对象并接收当前活动的handler对象。
后续:
情况1:CountDownTimer是单例模式,并持有当前活动的handler对象
messageDialog1? hashcode:29560034是我第一次进入活动创建的dialog对象,然后我退出当前活动。
第二次进入活动,创建了一个新的dialog对象messageDialog1?hashcode:96367861
但是,当五秒过后,在handleMessage中,收到消息关闭dialog时,这个dialog对象反而是第一次创建的dialog对象
看hashcode
所以关闭不了dialog,因为根本就不是同一个对象。原因会继续找。
TIPS:这里做一个小结,建议不要在单例类中,持有hanlder对象,否则就会发生这种操蛋的问题。
关于“倒计时的三种解决方法”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[痴玉]投稿,不代表创健号立场,如若转载,请注明出处:https://chuangjian-nb.com/cshi/202504-2132.html
评论列表(4条)
我是创健号的签约作者“痴玉”!
希望本篇文章《倒计时的三种解决方法》能对你有所帮助!
本站[创健号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“倒计时的三种解决方法”话题很是火热,小编也是针对倒计时的三种解决方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1、方...