Java定時器Timer簡述

来源:http://www.cnblogs.com/vectoryao/archive/2017/01/11/Java_Timer.html
-Advertisement-
Play Games

概述 主要用於Java線程里指定時間或周期運行任務。 是線程安全的,但不提供實時性(real time)保證。 構造函數 Timer() 預設構造函數。 Timer(boolean) 指定關聯線程是否作為daemon線程。 Timer(String) 指定關聯線程的名稱。 Timer(String, ...


概述

主要用於Java線程里指定時間或周期運行任務。Timer是線程安全的,但不提供實時性(real-time)保證。

構造函數

Timer()

預設構造函數。

Timer(boolean)

指定關聯線程是否作為daemon線程。

Timer(String)

指定關聯線程的名稱。

Timer(String, boolean)

同時指定關聯線程的名稱和是否作為daemon。

schdule方法

schedule(TimerTask task, long delay)

以當前時間為基準,延遲指定的毫秒後執行一次TimerTask任務。

schedule(TimerTask task, Date time)

在指定的日期執行一次TimerTask任務。

如果日期time早於當前時間,則立刻執行。

使用示例

public class Demo {
    private static Timer timer = new Timer();

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("Run Time:" + new Date().toString());
        }
    }
    
    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = "2016-12-27 14:36:00";
            Date date = sdf.parse(dateStr);
            System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
            timer.schedule(task, date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

執行結果

Date = Tue Dec 27 14:36:00 CST 2016 NowTime = Tue Dec 27 21:28:04 CST 2016
Run Time:Tue Dec 27 21:28:04 CST 2016

說明是立刻執行。

schedule(TimerTask task, long delay, long period)

以當前時間為基準,延遲指定的毫秒後,再按指定的時間間隔地無限次數的執行TimerTask任務。(fixed-delay execution)

使用示例

public class Demo {
    private static Timer timer = new Timer();

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("Run Time: " + new Date().toString());
        }
    }

    public static void main(String[] args) {
        MyTask task = new MyTask();
        System.out.println("Now Time: " + new Date().toString());
        timer.schedule(task, 3000, 5000);
    }
}

執行結果

Now Time: Tue Dec 27 21:34:59 CST 2016
Run Time: Tue Dec 27 21:35:02 CST 2016
Run Time: Tue Dec 27 21:35:07 CST 2016
Run Time: Tue Dec 27 21:35:12 CST 2016
Run Time: Tue Dec 27 21:35:17 CST 2016

說明以當前基準時間延遲3秒後執行一次,以後按指定間隔時間5秒無限次數的執行。

schedule(TimerTask task, Date firstTime, long period)

在指定的日期之後,按指定的時間間隔地無限次數的執行TimerTask任務。(fixed-delay execution)

如果日期firstTime早於當前時間,則立刻執行,且不執行在時間差內的任務。

使用示例

public class Demo {
    private static Timer timer = new Timer();

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("Run Time:" + new Date().toString());
        }

        public static void main(String[] args) {
            try {
                MyTask task = new MyTask();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String dateStr = "2016-12-27 14:36:00";
                Date date = sdf.parse(dateStr);
                System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
                timer.schedule(task, date, 3000);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
}

執行結果

Date = Tue Dec 27 14:36:00 CST 2016 NowTime = Tue Dec 27 21:43:30 CST 2016
Run Time:Tue Dec 27 21:43:30 CST 2016
Run Time:Tue Dec 27 21:43:33 CST 2016
Run Time:Tue Dec 27 21:43:36 CST 2016

說明指定的之間早於當前時間,則立刻執行,不會補充時間差內的任務

scheduleAtFixedRate方法

scheduleAtFixedRate(TimerTask task, long delay, long period)

以當前時間為基準,延遲指定的毫秒後,再按指定的時間間隔周期性地無限次數的執行TimerTask任務。(fixed-rate execution)

使用示例

public class Demo {
    private static Timer timer = new Timer();

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("Run Time: " + new Date().toString());
        }
    }

    public static void main(String[] args) {
        MyTask task = new MyTask();
        System.out.println("Now Time: " + new Date().toString());
        timer.scheduleAtFixedRate(task, 3000, 5000);
    }
}

執行結果

Now Time: Tue Dec 27 21:58:03 CST 2016
Run Time: Tue Dec 27 21:58:06 CST 2016
Run Time: Tue Dec 27 21:58:11 CST 2016
Run Time: Tue Dec 27 21:58:16 CST 2016
Run Time: Tue Dec 27 21:58:21 CST 2016

說明以當前基準時間延遲3秒後執行一次,以後按指定間隔時間5秒無限次數的執行。

scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

在指定的日期之後,按指定的時間間隔周期性地無限次數的執行TimerTask任務。(fixed-rate execution)

如果日期firstTime早於當前時間,則立即執行,並補充性的執行在時間差內的任務。

使用示例

public class Demo {
    private static Timer timer = new Timer();

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("Run Time:" + new Date().toString());
        }

        public static void main(String[] args) {
            try {
                MyTask task = new MyTask();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String dateStr = "2016-12-27 22:02:00";
                Date date = sdf.parse(dateStr);
                System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
                timer.scheduleAtFixedRate(task, date, 5000);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
}

執行結果

Date = Tue Dec 27 22:02:00 CST 2016 NowTime = Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:54 CST 2016
Run Time:Tue Dec 27 22:02:55 CST 2016
Run Time:Tue Dec 27 22:03:00 CST 2016
Run Time:Tue Dec 27 22:03:05 CST 2016

說明指定的之間早於當前時間,則立刻執行。

在時間22:02:00--22:02:54內大約有11個5秒間隔,則優先補充性的執行在時間差內的任務,然後在22:02:55補充完畢(執行12次。ps:0-55秒區間段內首位都算上,正好觸發12次),此後每隔5秒執行一次定時任務。

執行任務延時對比之 schedule 和 scheduleAtFixedRate

schedule不延時

使用示例

public class Demo {
    private static Timer timer = new Timer();
    private static int runCount = 0;

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                System.out.println("Begin Run Time: " + new Date().toString());
                Thread.sleep(3000);
                System.out.println("End Run Time: " + new Date().toString());
                runCount++;
                if (runCount == 3) {
                    timer.cancel();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = "2016-12-27 14:36:00";
            Date date = sdf.parse(dateStr);
            System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
            timer.schedule(task, date, 5000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

執行結果

早於當前基準時間

Date = Tue Dec 27 14:36:00 CST 2016 NowTime = Tue Dec 27 22:23:37 CST 2016
Begin Run Time: Tue Dec 27 22:23:37 CST 2016
End Run Time: Tue Dec 27 22:23:40 CST 2016
Begin Run Time: Tue Dec 27 22:23:42 CST 2016
End Run Time: Tue Dec 27 22:23:45 CST 2016
Begin Run Time: Tue Dec 27 22:23:47 CST 2016
End Run Time: Tue Dec 27 22:23:50 CST 2016

Process finished with exit code 0

晚於當前基準時間

Date = Tue Dec 27 22:42:00 CST 2016 NowTime = Tue Dec 27 22:41:54 CST 2016
Begin Run Time: Tue Dec 27 22:42:00 CST 2016
End Run Time: Tue Dec 27 22:42:03 CST 2016
Begin Run Time: Tue Dec 27 22:42:05 CST 2016
End Run Time: Tue Dec 27 22:42:08 CST 2016
Begin Run Time: Tue Dec 27 22:42:10 CST 2016
End Run Time: Tue Dec 27 22:42:13 CST 2016

Process finished with exit code 0

不管早還是晚於基準時間,都不進行補償,下一次任務的執行時間參考的是上一次任務的開始時間點來計算。

schedule延時

使用示例

public class Demo {
    private static Timer timer = new Timer();
    private static int runCount = 0;

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                System.out.println("Begin Run Time: " + new Date().toString());
                Thread.sleep(5000);
                System.out.println("End Run Time: " + new Date().toString());
                runCount++;
                if (runCount == 3) {
                    timer.cancel();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = "2016-12-27 22:42:00";
            Date date = sdf.parse(dateStr);
            System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
            timer.schedule(task, date, 3000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

執行結果

早於當前基準時間

Date = Tue Dec 27 22:42:00 CST 2016 NowTime = Tue Dec 27 22:45:17 CST 2016
Begin Run Time: Tue Dec 27 22:45:17 CST 2016
End Run Time: Tue Dec 27 22:45:22 CST 2016
Begin Run Time: Tue Dec 27 22:45:22 CST 2016
End Run Time: Tue Dec 27 22:45:27 CST 2016
Begin Run Time: Tue Dec 27 22:45:27 CST 2016
End Run Time: Tue Dec 27 22:45:32 CST 2016

Process finished with exit code 0

晚於當前基準時間

Date = Tue Dec 27 22:47:00 CST 2016 NowTime = Tue Dec 27 22:46:27 CST 2016
Begin Run Time: Tue Dec 27 22:47:00 CST 2016
End Run Time: Tue Dec 27 22:47:05 CST 2016
Begin Run Time: Tue Dec 27 22:47:05 CST 2016
End Run Time: Tue Dec 27 22:47:10 CST 2016
Begin Run Time: Tue Dec 27 22:47:10 CST 2016
End Run Time: Tue Dec 27 22:47:15 CST 2016

Process finished with exit code 0

不管早還是晚於當前基準時間,都不進行補償,下一次任務的執行時間都是參考上一次任務結束的時間點來計算。

scheduleAtFixedRate不延時

使用示例

public class Demo {
    private static Timer timer = new Timer();
    private static int runCount = 0;

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                System.out.println("Begin Run Time: " + new Date().toString());
                Thread.sleep(3000);
                System.out.println("End Run Time: " + new Date().toString());
                runCount++;
                if (runCount == 1000) {
                    timer.cancel();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = "2016-12-27 22:51:42";
            Date date = sdf.parse(dateStr);
            System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
            timer.scheduleAtFixedRate(task, date, 5000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

執行結果

早於當前基準時間

Date = Tue Dec 27 22:51:42 CST 2016 NowTime = Tue Dec 27 22:51:57 CST 2016
Begin Run Time: Tue Dec 27 22:51:57 CST 2016
End Run Time: Tue Dec 27 22:52:00 CST 2016
Begin Run Time: Tue Dec 27 22:52:00 CST 2016
End Run Time: Tue Dec 27 22:52:03 CST 2016
Begin Run Time: Tue Dec 27 22:52:03 CST 2016
End Run Time: Tue Dec 27 22:52:06 CST 2016
Begin Run Time: Tue Dec 27 22:52:06 CST 2016
End Run Time: Tue Dec 27 22:52:09 CST 2016
Begin Run Time: Tue Dec 27 22:52:09 CST 2016
End Run Time: Tue Dec 27 22:52:12 CST 2016
Begin Run Time: Tue Dec 27 22:52:12 CST 2016
End Run Time: Tue Dec 27 22:52:15 CST 2016
Begin Run Time: Tue Dec 27 22:52:15 CST 2016
End Run Time: Tue Dec 27 22:52:18 CST 2016
Begin Run Time: Tue Dec 27 22:52:18 CST 2016
End Run Time: Tue Dec 27 22:52:21 CST 2016
Begin Run Time: Tue Dec 27 22:52:22 CST 2016
End Run Time: Tue Dec 27 22:52:25 CST 2016
Begin Run Time: Tue Dec 27 22:52:27 CST 2016
End Run Time: Tue Dec 27 22:52:30 CST 2016
Begin Run Time: Tue Dec 27 22:52:32 CST 2016
End Run Time: Tue Dec 27 22:52:35 CST 2016
Begin Run Time: Tue Dec 27 22:52:37 CST 2016
End Run Time: Tue Dec 27 22:52:40 CST 2016
Begin Run Time: Tue Dec 27 22:52:42 CST 2016
End Run Time: Tue Dec 27 22:52:45 CST 2016
Begin Run Time: Tue Dec 27 22:52:47 CST 2016
End Run Time: Tue Dec 27 22:52:50 CST 2016
Begin Run Time: Tue Dec 27 22:52:52 CST 2016
End Run Time: Tue Dec 27 22:52:55 CST 2016
Begin Run Time: Tue Dec 27 22:52:57 CST 2016
End Run Time: Tue Dec 27 22:53:00 CST 2016

Process finished with exit code 0

晚於當前基準時間

Date = Tue Dec 27 22:37:00 CST 2016 NowTime = Tue Dec 27 22:36:06 CST 2016
Begin Run Time: Tue Dec 27 22:37:00 CST 2016
End Run Time: Tue Dec 27 22:37:03 CST 2016
Begin Run Time: Tue Dec 27 22:37:05 CST 2016
End Run Time: Tue Dec 27 22:37:08 CST 2016
Begin Run Time: Tue Dec 27 22:37:10 CST 2016
End Run Time: Tue Dec 27 22:37:13 CST 2016

Process finished with exit code 0

不延時的情況下,當早於基準時間時,時間差內的執行任務未補償完時,下一次執行任務的時間參考的是上一次執行任務的結束時間;一旦補償完畢(註意粗體時間點),下一次執行任務的時間參考的是上一次執行任務的開始時間;當晚於基準時間時,下一次執行任務的時間參考的是上一次執行任務的開始時間。

scheduleAtFixedRate延時

使用示例

public class Demo {
    private static Timer timer = new Timer();
    private static int runCount = 0;

    public static class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                System.out.println("Begin Run Time: " + new Date().toString());
                Thread.sleep(5000);
                System.out.println("End Run Time: " + new Date().toString());
                runCount++;
                if (runCount == 3) {
                    timer.cancel();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = "2016-12-27 22:28:00";
            Date date = sdf.parse(dateStr);
            System.out.println("Date = " + date.toString() + " NowTime = " + new Date().toString());
            timer.scheduleAtFixedRate(task, date, 3000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

執行結果

早於當前基準時間

Date = Tue Dec 27 23:01:00 CST 2016 NowTime = Tue Dec 27 23:01:19 CST 2016
Begin Run Time: Tue Dec 27 23:01:19 CST 2016
End Run Time: Tue Dec 27 23:01:24 CST 2016
Begin Run Time: Tue Dec 27 23:01:24 CST 2016
End Run Time: Tue Dec 27 23:01:29 CST 2016
Begin Run Time: Tue Dec 27 23:01:29 CST 2016
End Run Time: Tue Dec 27 23:01:34 CST 2016
Begin Run Time: Tue Dec 27 23:01:34 CST 2016
End Run Time: Tue Dec 27 23:01:39 CST 2016

晚於當前基準時間

Date = Tue Dec 27 22:28:00 CST 2016 NowTime = Tue Dec 27 22:27:55 CST 2016
Begin Run Time: Tue Dec 27 22:28:00 CST 2016
End Run Time: Tue Dec 27 22:28:05 CST 2016
Begin Run Time: Tue Dec 27 22:28:05 CST 2016
End Run Time: Tue Dec 27 22:28:10 CST 2016
Begin Run Time: Tue Dec 27 22:28:10 CST 2016
End Run Time: Tue Dec 27 22:28:15 CST 2016

Process finished with exit code 0

延時的情況下,即使是早於基準時間,由於延時效應,根本不可能補償完畢時間差內的執行任務,故而在延時的情況下,下一次任務的執行時間都是參考上一次任務結束的時間來計算。

對比總結

執行任務不延時 執行任務延時
早於當前基準時間 schedule:下一次任務的執行時間參考的是上一次任務的開始時間來計算。 scheduleAtFixedRate:當早於基準時間時,時間差內的執行任務未補償完時,下一次執行任務的時間參考的是上一次任務的結束時間;一旦補償完畢,下一次執行任務的時間參考上一次任務的開始時間來計算。 二者一樣。下一次任務的執行時間都是參考上一次任務的結束時間來計算。
晚於當前基準時間 二者一樣。下一次任務的執行時間參考的是上一次任務的開始時間來計算。 二者一樣。下一次任務的執行時間都是參考上一次任務的結束時間來計算。

註意:scheduleAtFixedRate示例中firstTime是有區別的,而結果證明是有補償性操作的。


(END)



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 成員的可訪問性 如果沒有顯示聲明成員的可訪問性,編譯器通常預設選擇private。CRL要求介面類型的所有成員都具有public可訪問性。 一個派生類重寫在他的基類型中定義的一個成員時,c#編譯器要求原始成員和重寫成員具有相同的可訪問性。(CRL不需要) 任何成員想要被別人訪問到,都必須在一個可見的 ...
  • 背水一戰 Windows 10 之 控制項(佈局類): Panel, Canvas, RelativePanel, StackPanel, Grid ...
  • 舉個例子: 帶輸入參數的存儲過程計算班級中英語和數學不及格的人數 if(exists(select * from sys.objects where name='usp_GetFailCount')) drop proc usp_GetFailCount go create proc usp_Get ...
  • 前臺用過jquery ajax將值傳遞到 後臺的一般處理程式 並且報了這個異常 原因是:前臺傳遞過來的時間格式不對 需要把 "/"換成 "-" 例如:2017-01-10 ...
  • 分析器錯誤 說明: 在分析向此請求提供服務所需資源時出錯。請檢查下列特定分析錯誤詳細信息並適當地修改 分析器錯誤消息: 未能創建類型“StockManageWebService.Service1”。源錯誤: 行 1: <%@ Page Language="C#" AutoEventWireup="t ...
  • 大家都知道,現在和以前比起來,互聯網行業、軟體行業已經天差地別了。現在處處都在搞信息化建設,人人都知道互聯網思維。這樣的信息化時代,對於軟體開發者、對於軟體開發公司來說,是一個巨大的機遇。 在門外漢看來,軟體開發是機遇大、成本低,只要叫幾個程式員,就能搞出個軟體公司來。但是,事實情況是這個樣子嗎?本 ...
  • 使用Mybatis開發Dao,通常有兩個方法,即原始Dao開發方法和Mapper介面開發方法,常用還是Mapper介面開發。 SqlSession的使用範圍 SqlSession中封裝了對資料庫的操作,如:查詢、插入、更新、刪除等。通過SqlSessionFactory創建SqlSession,而S ...
  • 一、系統預設編碼 python 2.7版本系統預設編碼是ascii python 3.1版本系統預設編碼是unicode 可以通過內建模塊sys獲取系統預設編碼 import sys print sys.getdefaultencoding() 有兩種方法可以講系統預設編碼變成utf-8 1、在代碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...