2017-05-03 13 views
0

自分のアプリケーションのキャッシュをクリアしようとしています と同じですアプリ - >アプリケーションの管理 - > "My App" - >キャッシュのクリア 、私はすでにこのコードを試しましたが動作しません。私は、アプリを閉じる前に、このような長いものをしない推薦するmain_acitivty.javaにアンドロイドで終了時にアプリケーションキャッシュをクリアする方法

void onCreate(){ 
} 
.. 
@Override 
protected void onStop(){ 
    super.onStop(); 
} 

//Fires after the OnStop() state 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    try { 
     trimCache(this); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
public static void trimCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 
public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    // The directory is now empty so delete it 
    return dir.delete(); 
} 
+1

あなたは 'trimCache' _before_' super.onDestroy'を呼び出すといいでしょうか? –

+0

@MattClark返信ありがとう私は私のアプリケーションを終了した後にキャッシュをクリアしたい – MrMR

+1

私はそれを取得し、あなたはすでに終了イベントのコードパスに入っています。 'super.onDestroy'はコードのすべてのオブジェクトをクリーンアップします。アプリを完全に終了する前にキャッシュをクリアする必要があります。私の前提では、あなたのコードが実行される前にアプリケーションが終了するため、キャッシュが実際にクリアされていないということです。また、他の人のコード1:1をコピーするときは、[少なくともそれを著者に帰属させる](http://stackoverflow.com/a/18200934/1790644)。 –

答えて

1

をそれを置きます。

これは視覚的にアプリケーションの終了を遅くすることができますか、システムによってまったく無視することができます。

このファイルを一時的に使用すると、削除に最適な時間よりもファイルを使用した後にファイルが一時的に使用されます。

このファイルを使用してアプリ内のいくつかの速度を向上させると、ユーザーに直接キャッシュ管理を提供するのが普通です。例えば、設定のシンプルなボタン「Clear cache」。

また、@Nicolas Maltais onDestroyに記載されているように、必ずしも呼び出されるわけではありません。また、場合によってはonStopも必ずしも呼び出されるとは限りません。

しかし、このようにしたい場合は、アプリが終了していることも知っておく必要があります。複数のアクティビティがある場合は、オープン/クローズドアクティビティをカウントする必要があります。最も簡単な方法は、Activity Lifecycle callbackを実装し、それらをApplicationクラスに登録することです。この実装では、onCreateでカウンタ変数をインクリメントし、onDestroyで減少させる必要があります。そして、あなたは、onDestroyで減少した後、ゼロカウンターとしてアプリケーションを閉じることを決定することができます。

int mCounter; 

void onCreate() { 
    ++mCounter 
} 

void onDestroy() { 
    --mCounter; 
    if (mCounter == 0) { 
     // app is closing 
    } 
} 

UPD: あなたはアプリケーションクラスまたはシングルトンとして、このコールバックを保存する必要があります。

+0

私は 'mCounter'がこれを動作させるためにインスタンス状態バンドルに保存して復元する必要があると思います –

関連する問題