簡體   English   中英

如何清除內存中被殺死的進程

[英]how to clear process from memroy when it is killed

當它被殺死時如何從內存中清除進程,我不在乎進程為空還是什么也不做。 只想從內存中清除它。

要么

一次讀取1M文件后,兩次讀取將從內存/高速緩存中讀取該文件。 問題是,一次讀取后是否可以從內存或緩存中清除?

謝謝

最好的答案是: 您不會“清除它” :讓android處理它們。 如果有內存需求,則任何進程都將被殺死。 關於緩存, 垃圾收集器會處理它。 同樣,無需做任何事情(也許,除非確保您沒有將對它的實時引用留在某處)。

我在android博客中引用Dianne Hackborn的帖子的一部分:

應用程序什么時候“停止”?

關於Android多任務處理的一個常見誤解是流程和應用程序之間的差異。 在Android中,這些不是緊密耦合的實體:對於用戶而言,似乎沒有當前正在運行該應用程序的實際進程的應用程序; 多個應用程序可以共享進程,或者一個應用程序可以根據需要使用多個進程; 即使該應用程序沒有積極地做某事,該應用程序的進程也可能會被Android保留。

您可以看到應用程序的進程“正在運行”的事實並不意味着該應用程序正在運行或正在執行任何操作。 它可能只是存在,因為Android在某個時候需要它,並決定最好保留它,以防再次需要它。 同樣,您可能需要離開應用程序一小段時間,然后從上次中斷的地方返回該應用程序,在此期間,Android可能需要擺脫其他原因的處理。

Android如何以這種方式處理應用程序的一個關鍵是流程不會被徹底關閉。 當用戶離開應用程序時,其過程將保留在后台,以便在需要時可以繼續工作(例如下載網頁),如果用戶返回該應用程序,則會立即進入前台。 如果設備永遠不會用完內存,那么Android將保留所有這些進程,真正使所有應用程序始終“運行”。

當然,內存是有限的,要適應這種情況,Android必須決定何時清除不需要的進程。 這導致了Android的流程生命周期,即用於確定每個流程的重要性的規則,從而決定了應該刪除的下一個流程。 這些規則基於流程對用戶當前體驗的重要性以及自用戶最后一次使用該流程以來已經花費了多長時間。

如果您想終止該進程,這可能會有所幫助,

 int pid = android.os.Process.myPid();
     android.os.Process.killProcess(pid);
  Runtime r = Runtime.getRuntime();

    r.gc();
    System.gc();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM