2013-01-10 8 views
25

Androidの場合、「設定」 - >「アプリケーション」を調べると、「実行中」タブの下で、メモリが「使用済みメモリ」と「メモリフリー」の部分に分割されていることがわかります。 「中古メモリ」または「メモリフリー」のいずれかに入れます。 「メモリフリー」の部分のアプリケーションは「キャッシュバックグラウンドプロセス」と呼ばれます。Androidでは、プロセスとキャッシュされたバックグラウンドプロセスの違いは何ですか?

「キャッシュバックグラウンドプロセス」とは何ですか?彼らは "ディスク"(デスクトップ/ラップトップのように)に切り替えるのではなく、まだメモリに残っています。ユーザーがこれらの「キャッシュバックグラウンドプロセス」の1つをタブすると、実行中のプロセスと同じように、まだメモリに残っているのですぐに表示されます。

Androidはアプリケーションを「キャッシュ」するときに何をしますか?

答えて

40

「キャッシュバックグラウンドプロセス」とは何ですか?

デバイスのUIに記載されているものの技術的な解釈を求めているため、デバイスメーカーが設定アプリを使用するように選択した場合、デバイスによってその定義が異なる場合があります。

「キャッシュバックグラウンドプロセス」とは、通常、フォアグラウンドのアクティビティを持たず、実行中のサービスを持たないプロセスを指します。これらのプロセスは、メモリを十分に確保しているためメモリに保持されるため、ユーザーはこれらのプロセスに素早く切り替えることができます。 Androidはまだ他のプロセスにシステムRAMを必要とし始めているので、「キャッシュバックグラウンドプロセス」はシステムRAMを解放するために終了するプロセスです。

"キャッシュされたバックグラウンドプロセス"の優れた例は、ユーザーがアプリを起動し、その周りを短く突き刺した後、HOMEキーを押してホーム画面に戻る場合です。プロセスに実行中のサービスがない場合は、「キャッシュされたバックグラウンドプロセス」としてリストされていることがわかります。

「ディスク」(デスクトップ/ラップトップのように)に切り替えるのではなく、まだメモリに残っていますか?

正しい。 Androidデバイスはスワップスペースを使用しません。

+0

良い説明!私はまた、アプリケーションによって使用されるいくつかのデータが、アプリケーションをキャッシュするときに失われる可能性があることに気付きました。例えば。私はYoubuteビデオを見た後、 "Home"ボタンを押してビデオを元に戻し、最初から読み込みを開始したことがわかりました。これは正しいのでしょうか? – JackWM

+0

@JackWM:それはアプリと書かれた方法によって異なります。 – CommonsWare

+0

さて、あなたはこれがアプリケーション作家によって指定されているということですか? "onPause()"関数を通して?キャッシュされている間にアプリケーションが維持できるデータサイズに関する要件はありますか? – JackWM

17

"Setting" app's source codeをご覧ください。

Nexus 4では、「設定」 - >「アプリ」 - >「実行中」と表示されます。

開始する前に

enter image description hereenter image description here


Androidのプロセスにおける重要階層内の5つのレベルがあります。これらは、あなたがより多くを見つけることができ

1)フォアグラウンド・プロセス、
2)可視プロセス、
3)サービスプロセス、
4)バックグラウンドプロセス、
5)空のプロセス

です詳細は"Processes and Threads" document in Android Developer siteです。

私はコードに見えなかった、そしてそれはは、その重要性の階層に等しいか、または「バックグラウンドプロセス」より低いそれらのプロセスを示し「SHOWキャッシュされたプロセスを」判明。一方、「SHOW RUNNING SERVICES」は、重要度階層が「可視プロセス」以上であるを示しています。です。私は明確に主要なポイントを示すためにいくつかの詳細を落とした。この部分の完全なソースコードはhereです。

try { 
     final int numProc = mAllProcessItems.size(); 
     int[] pids = new int[numProc]; 
     for (int i=0; i<numProc; i++) { 
      pids[i] = mAllProcessItems.get(i).mPid; 
     } 

     ... 

     for (int i=0; i<pids.length; i++) { 
      ProcessItem proc = mAllProcessItems.get(i); 
      changed |= proc.updateSize(context, pss[i], mSequence); 
      if (proc.mCurSeq == mSequence) { 
       serviceProcessMemory += proc.mSize; 
      } else if (proc.mRunningProcessInfo.importance >= 
        ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { 
       backgroundProcessMemory += proc.mSize; 
       MergedItem mergedItem; 
       if (newBackgroundItems != null) { 
        mergedItem = proc.mMergedItem = new MergedItem(proc.mUserId); 
        proc.mMergedItem.mProcess = proc; 
        diffUsers |= mergedItem.mUserId != mMyUserId; 
        newBackgroundItems.add(mergedItem); 
       } else { 
        ... 
       } 

       ... 

      } else if (proc.mRunningProcessInfo.importance <= 
        ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE) { 
       foregroundProcessMemory += proc.mSize; 
      } 
     } 
    } catch (RemoteException e) { 
    } 


だから、戻ってあなたの質問に、

彼らは右、(デスクトップ/ラップトップがそうであるように) "ディスク" に切り替えるのではなく、メモリにまだありますか?

はい、彼らはメモリに残っているが、最終的にAndroidシステムは、新規またはより重要なプロセスのためにメモリを解放するために、古いプロセスを削除する必要があるかもしれません。どのプロセスを保存し、どのプロセスを終了するかを決定するために、システムは各プロセスを「重要度階層」に配置します。

これらの「キャッシュバックグラウンドプロセス」の1つにタブが表示されると、実行中のプロセスと同じように、メモリ内にすぐに表示されます。

。たとえば、the only reason to keep "Empty process" alive is to improve startup time the next time a component needs to run in it.

アプリケーションを「キャッシュする」とは何ですか?

私の知る限り、は、それは単にプロセスを強制終了し、彼/彼女が帰ってきたときに、すぐにユーザーに対応するためのリソースを保持しません。

+4

設定のソースコードを掘り下げてくれてありがとう:) – Cong

+2

うわー、すばらしい、ありがとう! :) – Javatar

+0

私はプロセスを実行しているキャッシュを解放しているクリーナーアプリを持っていますどのようにして、あなたはどのように私はプロセスとリリースのキャッシュサイズのキャッシュサイズを見つけることができます私に教えることができますか?@Javatar @congliu – Erum

1

プロセスは、Androidオペレーティングシステムは、できるだけ長く ために、実行中のアプリケーションを維持しようと

ランクが、使用可能なメモリが低いとき、それは殺すことで システム内のリソースを解放しようとしますより重要度の低いプロセス。

これはプロセスのランキングが画像に入るときです。

  • フォアグラウンドプロセス:Androidのプロセスは、より低い優先度の高い優先度から次FVEカテゴリにランク ある。これは、ユーザが現在対話している 活性またはサービスをホストするプロセスです。サービスは、フォアグラウンドで起動または サービスは、そのライフ・サイクル・コールバック
  • 可視プロセス
  • を実行している:これは目に見える活動に囲まれた一時停止の活動やサービス をホストするプロセスである
  • サービスプロセス:これは、可視アクティビティにバインドされていないサービスをホストするプロセスです。
  • バックグラウンドプロセス:これは目に見えないアクティビティをホストするプロセスです。すべて バックグラウンド・プロセスは、 したがって、最近使用のプロセスが最後に殺さプロセスであり、最低使用頻度(LRU)リストの上にソートされている場合 彼ら
  • 空のプロセス:これは、非アクティブキャッシュするために使用されるプロセスでありますシステムは、それがリソースを解放する必要があることをポイントに達するとAndroidのコンポーネントは と任意のコンポーネントの起動時間を改善する

、殺されるために使用可能なプロセス は を最後に使用し、アカウント内にプロセスランクを取って、ソートされますプロセス、および実行中のコンポーネントが含まれます。

出典

非同期のAndroidプログラミング - 第2版 - ヘルダーヴァスコンセロス - 2016年7月

関連する問題