題:
有什麼辦法可以強制應用程序始終在後台運行?
supertonsky
2012-07-09 10:37:44 UTC
view on stackexchange narkive permalink

在Ice Cream Sandwich(ICS)上,操作系統將您的應用程序分類,並且每個類別都有其自己的閾值,在該閾值中,操作系統使用它來確定哪個應用程序在內存不足時首先關閉。

令您煩惱的是,例如您打開了一個計時器在後台運行以測量某物的經過時間,然後又打開了幾個應用程序並返回計時器,只是看到它已重置或關閉?我的意思是說,真的,這確實令人討厭。

是否有一種方法可以強制應用程序即使在操作系統內存不足時也可以在後台繼續運行?

這是該應用程序錯誤代碼的標誌。用戶永遠不必為此煩惱,Android提供了手段,以便應用程序可以保存其狀態並在以後恢復狀態(因為早期的Android版本)。您應該將錯誤報告發送給App開發人員。
五 答案:
Torque
2015-03-22 18:14:16 UTC
view on stackexchange narkive permalink

接受的答案原來是錯誤的或過時的。 Xposed應用程序的“應用程序設置”模塊允許您基於每個應用程序指定以防止應用程序被殺死或釋放:

http://repo.xposed.info/module/ de.robv.android.xposed.installer

http://repo.xposed.info/module/de.robv.android.xposed.mods.appsettings

在玩更改此類低級行為的應用程序時,應謹慎負責。

應該注意的是,這需要root用戶,並且需要對Android OS進行大量修改。
onik
2012-07-09 11:06:28 UTC
view on stackexchange narkive permalink

簡單答案:否。Android始終使用OOM(內存不足)優先級來釋放未使用的內存。您可以使用某些任務管理器來更改應用程序的優先級(至少在重新啟動之前),但是即使在內存不足的情況下,後台的應用程序也會開始被殺死。

考慮這種情況:您已經下載了在啟動時運行的錯誤編碼的應用程序,會導致緩衝區溢出並佔用您的所有內存。通常,該應用會被殺死,但是如果將其設置為保持打開狀態,則會有效地阻塞您的手機,直到重新啟動,然後再次啟動,如此反复。等等。問題,但是如果您在計時器處於後台運行時啟動足夠多的高性能,佔用資源的應用程序,最終將被殺死。

看起來就是這樣。我想知道該規則是否有例外,例如電話,通訊錄,警報等系統應用。我希望google將來會為用戶提供一個選項,以“固定”用戶手動啟動的任何應用。不必在啟動時執行此操作即可防止手機阻塞。或者,也許他們至少可以讓系統嘗試將其固定一會兒,如果系統沒有響應,請讓用戶關閉它。
如果發生這種情況,我至少期望的是此類應用程序的新權限類別。這將有助於重視電池壽命和系統穩定性的人們避免使用這些應用。我會。
IMO,不必那樣。默認情況下,讓系統按照其舊方式運行,並且如果用戶希望某個特定應用僅在出現需求的特定時刻在後台運行,則只需提供該選項即可。它不需要具有其他權限類別,因為用戶可以自行決定“固定”應用程序。我不希望某個應用一旦運行就永遠無法停止。我只希望有一個選項可以在有需要時(就像我在問題中描述的那樣)執行此操作。
@onik緩衝區溢出與占用內存無關。您知道什麼是緩衝區溢出嗎?
@dcow是的,我對緩衝區溢出很熟悉。由於Android為其沙箱分配了動態內存,因此緩衝區溢出可能會超出當前內存邊界並導致沙箱增長。當然,由於Java的內存處理方式,這也許只是一個小眾的例子,更好的例子是LinkedList中的無限循環,它的結構不限於Integer.MAX_VALUE,並且可以動態增長。
@onik因此答案是否定的,您不知道緩衝區溢出是什麼。得到它了。
@onik這是一個鏈接,順便說一句:http://en.wikipedia.org/wiki/Buffer_overflow
在循環Integer.MAX_VALUE時間之前,@onik還是鍊錶中的無限循環肯定會使您陷入OOM中。您為什麼仍然認為事情受到`Integer.MAX_VALUE`的限制?
@dcow,所以您是說緩衝區溢出無法擴展動態分配的內存大小,或者這不是通常的表示方式?限制來自數組和向量的內部結構,在這種情況下,我碰巧首先想到了這種結構。哦,感謝您的鏈接,我從未聽說過維基百科! ;)
-1
Erik
2012-07-09 11:50:53 UTC
view on stackexchange narkive permalink

不。但是,想到了兩種緩解問題的方法,但這兩種方法都只能由開發人員實施:第一種是顯示通知,Android會向執行此操作的應用程序賦予更高的優先級。第二個是保存開始時間,因此當計時器最終重新啟動時,不會被重置。

毫無理由地以前台優先級運行應用程序(這就是為什麼需要通知的原因)被認為是不好的做法。如前所述:Android提供了一個不錯的Api,它甚至允許不受OOM殺手affected影響的計時器/計數器。 [Dianne Hackborn對此主題發表了一篇不錯的文章](https://plus.google.com/105051985738280261832/posts/JAqggyKcM2z)
我毫不懷疑有這樣的API,但是在此問題中前面提到過什麼?
另外,很明顯,在這種情況下,有可能保持應用程序始終運行,這與您發布的遊戲示例不同。
沒有任何理由僅因為計時器而使應用程序保持運行。只需使用onSaveInstanceState和onRestoreInstanceState即可保護應用狀態,包括計時器信息。無需在前景中運行。即使是警報,您也可以使用AlarmManager來確保稍後執行。應該使用前景的唯一原因是:1.您正在進行一些實際的前景活動,例如播放音樂或播放視頻。 2.您想保持數據連接打開(例如IMAP IDLE(推送))。
Becky Mannie
2019-02-22 07:16:05 UTC
view on stackexchange narkive permalink

第一種方法:-如果您在程序中創建了粘滯線程,可以,可以強製程序繼續運行。但是請記住,處於高級設置模式的用戶可以停止後台運行的應用程序。但是,如果您以在發生任何give事件時啟動粘滯線程的方式編寫粘滯線程,則可以實現此目的。

第二種方法:IF用戶不是紮根的android系統,你想在背景上運行一個應用程序。在應用程序的後台窗體中使用SL4腳本。使用腳本進行後台檢查和程序,並編寫前端以顯示其他內容。

例如:在大多數遊戲引擎中,這是內置的。即使用戶關閉了應用程序,它們也連接到服務器。引擎在電話中創建多個腳本的原因,在任何特定事件下都會對其進行隨機檢查,並且TRIGGER用於在前台背景上連續運行您的應用。

***對不起,TYPO的..拼寫檢查器不可用。希望你能達到你想要的目標。

歡迎使用Android Enthusiast,這是一個針對Android最終用戶的問答網站。據我了解,您提供的2種方法只能在開發人員(即擁有應用程序源代碼的一方)完成。不幸的是,這可能對這裡的大多數讀者沒有幫助,因為他們沒有開發應用程序。*如果*這可能適用於非開發人員,請考慮[答案]答案以明確說明*如何做到這些而無需觸及應用程序的源代碼*。謝謝。
Jayesh Tiwari
2012-07-09 13:49:18 UTC
view on stackexchange narkive permalink

有時可以選擇鎖定該應用。這樣可以防止殺死停止手機中的該應用程序。

使用某些第三方應用程序(例如 GO任務管理器 等可以提供幫助。

OOM殺死是由內核完成的,沒有任何應用程序可以阻止或“鎖定”進程。您鏈接到的應用程序是一個任務殺手,可以殺死應用程序本身。您所指的鎖定功能只會阻止任務殺手殺死它。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...