首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Service 確保執行緒單一實例:使用靜態布林旗標防止重複啟動

     編輯:程式設計綜合問答

在 Service 中宣告 static boolean isThreadRunning,啟動執行緒前檢查旗標,結束時重設,避免重複啟動導致相機等資源衝突。

程式碼

public class MyService extends Service {
    private static boolean isThreadRunning = false;
    private Thread workerThread;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (isThreadRunning) return START_STICKY; // 已在運行

        isThreadRunning = true;
        workerThread = new Thread(() -> {
            try {
                // 執行緒主體:相機預覽、資料處理等
                while (isThreadRunning) {
                    // 工作迴圈
                }
            } finally {
                isThreadRunning = false; // 確保重設
            }
        });
        workerThread.start();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        isThreadRunning = false; // 通知執行緒結束
        if (workerThread != null) workerThread.interrupt();
        super.onDestroy();
    }
}

關鍵點

  • static 確保旗標跨 Service 實例共享(系統可能重建 Service)。
  • 執行緒迴圈定期檢查 isThreadRunning 優雅退出。
  • onDestroy 中設為 false 並 interrupt 執行緒。
  • 若需跨進程單例,需用 FileLock 或系統級鎖。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved