Android 定時器簡單使用及學習

本文,介紹常用定時器實現方式:

1)Handler+Sleep方式

2)Handler+PostDelayed方式

3)Handler+Timer方式

Handler的主要作用就是用來處理接收到的信息,用Handler消息傳遞機制是爲了多個線程 併發 更新U的同時,保證線程安全

1)Handler+Sleep方式

1.1)Handler+Sleep定義

public class HandlerAndSleep {

    public HandlerAndSleep()
    {
    }

    //定義Handler對象,用於處理接收Message
    Handler handler = new Handler(Looper.getMainLooper()){

        @Override
        public void handleMessage(@NonNull Message msg){
            super.handleMessage(msg);
            Log.d("HandlerAndSleep","HandlerAndSleep,時間:"+  ToolHelper.GetNowDate());
        }
    };
    //新建一個實現Runnable接口的線程類
    class MyThread implements Runnable{
        @Override
        public void run() {
            while (true){
                try {
                    Thread.sleep(1000);
                    Message message = new Message();
                    message.what = 1;
                    handler.sendMessage(message);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //開啓
    public void Start(){
        new Thread(new MyThread()).start();
    }
    //關閉(存在問題,無法使用)
    public void Stop(){
        new Thread(new MyThread()).stop();
    }
}

1.2)Handler+Sleep調用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
//HandlerAndSleep實現定時器調用 HandlerAndSleep handlerAndSleep = new HandlerAndSleep(); handlerAndSleep.Start(); } }

1.3)Handler+Sleep結果

 2)Handler+PostDelayed方式

2.1)Handler+PostDelayed定義

public class HandlerAndPostDelayed {

    public HandlerAndPostDelayed(){

    }

    //定義Handler對象,用於處理接收Message
    Handler handler = new Handler(){

       @Override
        public boolean sendMessageAtTime(@NonNull Message msg,long uptimeMillis){

           Log.d("HandlerAndPostDelayed","HandlerAndPostDelayed,時間:"+  ToolHelper.GetNowDate());
           return super.sendMessageAtTime(msg,uptimeMillis);
       }
    };

    Runnable runnable = new Runnable() {
        @Override
        public void run() {

            handler.postDelayed(this,1000);
        }
    };

    //開啓定時器
    public void Start(){
        handler.postDelayed(runnable,1000);
    }
    //關閉定時器
    public void Stop(){
        handler.removeCallbacks(runnable);
    }
}

2.2)Handler+PostDelayed調用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        //HandlerAndPostDelayed實現定時器調用
        HandlerAndPostDelayed handlerAndPostDelayed = new HandlerAndPostDelayed();
        handlerAndPostDelayed.Start();
}
}

2.3)Handler+PostDelayed結果

 3)Handler+Timer方式

 3.1)Handler+Timer定義

public class HandlerAndTimer {
    public HandlerAndTimer(){
}
private final Timer timer = new Timer(); Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg){ Log.d("HandlerAndTimer","HandlerAndTimer,時間:"+ ToolHelper.GetNowDate()); super.handleMessage(msg); } }; TimerTask timerTask = new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; public void Start(){ timer.schedule(timerTask,0,1000); } public void Stop(){ timer.cancel(); } }

 3.2)Handler+Timer調用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

       //HandlerAndTimer實現定時器調用
        HandlerAndTimer handlerAndTimer = new HandlerAndTimer();
        handlerAndTimer.Start();
   }
}

3.3)Handler+Timer結果

 附加下獲取當前時間方法

public class ToolHelper {

    public static String GetNowDate(){
        //獲取當前時間
        Date date = new Date(System.currentTimeMillis());
        //日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(date);
    }
}

參考來源:https://blog.csdn.net/Twan1234/article/details/125050488

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章