我希望這不會是一個完整的解決方案。但是我會嘗試給出一個解決方案來延長你的應用程序的生命週期。首先,不可能讓應用程序始終保持活躍狀態。這違背了Android的規則,因爲當系統需要資源(對於前臺應用程序)時,它可能會停止您的應用程序。但是,您可以通過將功能推入服務來延長應用程序的生命週期。以下是您的解決方案。
創建一個活動,其中有2個按鈕來啓動和停止記錄。
創建一個服務並將一個公共靜態變量設置爲一個設置爲true或false的標誌。
在活動中,使用上述靜態字段檢查服務是否處於活動狀態,並根據它啓用或禁用開始錄製按鈕。
使用該按鈕啓動服務,在服務中獲取部分喚醒鎖定並啓動線程並進行錄製。我希望你不想重新發送你的意圖到服務,因爲它用於啓動一個線程進行錄製。只有在有待處理的開始呼叫時,纔可以使用START_NOT_STICKY重新啓動服務。如果您真的想重新錄製您的錄音意圖並添加新錄音,我會說這是少點,因爲您不知道何時該服務將重新啓動,您可能會錯過某些錄音。
當您持有部分喚醒鎖時,它將繼續運行,直到Foreground應用程序需要資源。由於該服務的優先級高於後臺應用程序。
在onDestroy()使用中斷標誌停止線程(通過檢查中斷標誌保存記錄),將public static字段設置爲FALSE並釋放喚醒鎖。完成後,您可以從活動開始錄製。
通過在您的活動中使用FLAG_KEEP_SCREEN_ON,您只是告訴系統「當我在此活動中時保持屏幕開啓」。如果你打回家或切換到另一個活動,它將無法正常工作。我希望像視頻播放器這樣的遊戲或應用程序使用它來保持屏幕。
我還應該指出,通過保持部分喚醒鎖定時間較長,可能會使您的電池消耗很大。如果您使用FLAG_KEEP_SCREEN_ON,您也可以建議您的用戶留在連續錄製的活動中。
雖然我會建議啓動意向服務,獲取部分喚醒鎖並開始記錄。因爲它會停止創建新線程並在需要時啓動或停止它的開銷。
另外在iOS中,當您的應用程序切換到後臺時,我認爲系統GC爲應用程序提供資源。這就是我在學習iOS時記得的。
我希望我的解決方案能夠幫助您延長應用程序的使用壽命。謝謝
「'如何保持應用程序在後臺運行」#不,你不能這樣做。你可以使用'START_STICKY'做一個服務,但是一旦系統需要資源,這個服務就會重啓。 –
@SharpEdge感謝您的服務點。我去做。 Android可以在後臺重新啓動musicplayer應用程序嗎? –
老實說,我不知道,因爲我沒有製作或使用任何音樂播放器應用程序,除了股票的應用程序。你可以谷歌它雖然。音樂應用程序如何作爲服務工作必須有解決方法。 –