天天看點

Handler和Timer實作倒計時跳轉頁面

   我們在app的導航頁應用到倒計時3秒進入首頁,并且是第一次進入的時候顯示該導航頁,第二次進入的時候直接進入首頁

   此處我們可以使用handler+sharedpreferences 或者timer+sharedpreferences實作效果

  話不多說,直接上代碼

   首先,我們簡單的寫兩個activity的布局,用于跳轉

Handler和Timer實作倒計時跳轉頁面

簡單的寫一個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!

繼續閱讀