2016-05-07 8 views
0

getFilesDir()がどのように機能するかを説明するリンクを説明したり、提供することはできますか?私はそれが特定のパッケージ名の内部ストレージ上のパスを返すことを知っています。しかし、私はそれがパスをどのように返すのか知りたがりましたか?アプリケーションのインストール時にフォルダが直接作成されるか、メソッドが最初に呼び出されたときにフォルダが作成されますか?その他の同様の質問。アンドロイドgetFileDirメソッドはどのように動作しますか

+0

アンドロイドSDKの 'getFileDir'メソッドはありません – pskink

答えて

1

Here is the stock implementation of ContextContextImplとして知られている。

getFilesDir()の実装は、Androidの6.0のように、次のとおりです。

@Override 
public File getFilesDir() { 
    synchronized (mSync) { 
     if (mFilesDir == null) { 
      mFilesDir = new File(getDataDirFile(), "files"); 
     } 
     return createFilesDirLocked(mFilesDir); 
    } 
} 

createFilesDirLocked()は、必要に応じて、ディレクトリを作成するために、いくつかの複雑な曲折を経る:

// Common-path handling of app data dir creation 
private static File createFilesDirLocked(File file) { 
    if (!file.exists()) { 
     if (!file.mkdirs()) { 
      if (file.exists()) { 
       // spurious failure; probably racing with another process for this app 
       return file; 
      } 
      Log.w(TAG, "Unable to create files subdir " + file.getPath()); 
      return null; 
     } 
     FileUtils.setPermissions(
       file.getPath(), 
       FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH, 
       -1, -1); 
    } 
    return file; 
} 

は直接フォルダですアプリケーションのインストール時に作成されるか、メソッドが最初に呼び出されたときに作成されますか?

AFAIKは、メソッドが呼び出されると作成されます。これを自分でテストすることができます:アプリケーションを作成し、それをエミュレータにインストールしますが、実行しないでください。 Androidデバイスモニタまたはadb shellを使用して、ディレクトリが存在するかどうかを確認します。

および他の同様の質問

あなたのレジャーでのAndroidのフレームワーククラスのためのJavaコードを熟読することを歓迎しています。

+0

/data/dataからファイルを評価することができます –

+0

@AmarbirSingh:エミュレータでは、はい。実際のデバイスで – CommonsWare

+0

! –

関連する問題