Handler和Timer实现倒计时跳转页面

   我们在app的导航页应用到倒计时3秒进入主页,并且是第一次进入的时候显示该导航页,第二次进入的时候直接进入主页

   此处我们可以使用handler+sharedpreferences 或者timer+sharedpreferences实现效果

  话不多说,直接上代码

  

   首先,我们简单的写两个activity的布局,用于跳转


简单的写一个textview用于显示倒计时秒数

public class StartActivity extends AppCompatActivity {

    private TextView jump;
    private SharedPreferences mSp;
    private SharedPreferences.Editor mEdit;
Timer timer=new Timer(); //利用timer实现倒计时跳转  
         int c=3;     
    TimerTask task=new TimerTask() {         
        @Override         
        public void run() {             
             runOnUiThread(new Runnable() {     //子线程不能更新UI,将逻辑写在runOnUiThread内
                 @Override                 
                   public void run() {                     
                      jump.setText("还有"+c+"秒跳转");                  
                          c--;                       //定义一个变量c作为倒计时间                     
                           if (c<0){                         
                             timer.cancel();         //利用Intent实现跳转                         
                         Intent intent = new Intent(StartActivity.this, MainActivity.class);                         
                              startActivity(intent);                         
                                    finish();                    
                                         }                
                                           }             
                                               });        
                                            }     };
 
    Handler handler=new Handler(){      //利用handler实现倒计时跳转
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 0:
                jump.setText("还有"+c+"秒跳转");
                c--;
                if (c<0){

                    Intent intent = new Intent(StartActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }else {                            //倒计时间<0秒时进行跳转,否则继续发消息进行更新UI
                    handler.sendEmptyMessageDelayed(0,1000);
                }
                mEdit.putBoolean("first",false);    //sharedpreferences存第一次进入该界面的boolean状态值
                mEdit.commit(); 
                break;

            default:
                break;
        }
    }
};

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        initView();  //初始化控件

       timer.schedule(task,1000,1000);

        mSp = getSharedPreferences("first", MODE_PRIVATE);   //初始化sp对象
        boolean first = mSp.getBoolean("first", true);       //取sp的值,如果是true,代表第一次进入,否则直接跳转
        if (first){
            handler.sendEmptyMessageDelayed(0,1000);
        }else {
            Intent intent = new Intent(StartActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
        mEdit = mSp.edit();               //初始化sp编辑器edit对象

    }

    private void initView() {
        jump = (TextView) findViewById(R.id.jump);  //根据ID找控件
    }
}

 我用两种方式都可以实现倒计时效果,是不是so easy! 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值