Я попытался очистить кэш-память через кнопку в моем приложении, используя приведенный ниже код.
activity_main.xmlНевозможно очистить память кэша Программно Android
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/textView" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/button" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete Cache"
android:id="@+id/button2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retrive Data"
android:id="@+id/button3" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView t1;
EditText et1;
Button b1,b2,b3;
public static final String PREFS_NAME = "MyPrefsFile";
SharedPreferences settings;
SharedPreferences.Editor editor;
private static MainActivity instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
settings = getSharedPreferences(MainActivity.PREFS_NAME, 0);
editor= settings.edit();
instance=this;
t1=(TextView)findViewById(R.id.textView);
et1=(EditText)findViewById(R.id.editText);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
b3=(Button)findViewById(R.id.button3);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putString("editText",et1.getText().toString());
editor.commit();
t1.setText(settings.getString("editText",null));
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
t1.setText("");
MainActivity.getInstance().clearApplicationData();
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
t1.setText(settings.getString("editText",null));
}
});
}
public static MainActivity getInstance(){ return instance;}
public void clearApplicationData(){
File cache= getCacheDir();
File appDir=new File(cache.getParent());
if(appDir.exists()){
String[] children = appDir.list();
for(String s: children){
if(!s.equals("lib")){
deleteDir(new File(appDir,s));
Log.i("TAG", "File /data/data/APP_PACKAGE/ " + s +" DELETED");
}
}
}
}
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;
}
}
return dir.delete();
}
else {
return false;
}
}}
Explaination:
Во время нажатия Сохранить кнопки значения набрано в EditText будет сохранено в общего Предпочтения. При нажатии Удалить кеш записанный код для удаления кэш-памяти с Refer 1, Refer 2. Пока нажмите Retrive значение, хранящееся в . Общее предпочтение будет извлечено и отображено в TextView.
Issue: Хотя нажав Delete Cache в моей LogCat его, показывая, что кэш-памяти удалены и shared_prefs удален но мой размер кэш-памяти не уменьшается. При нажатии Retrive Значение от Общее предпочтение восстанавливается и отображается в TextView, но значение должно быть удалено.
Мой LogCat:
01-09 17:02:26.872 24290-24290/? I/TAG: File /data/data/APP_PACKAGE/ cache DELETED
01-09 17:02:26.872 24290-24290/? I/TAG: File /data/data/APP_PACKAGE/ shared_prefs DELETED
Я не знаю, что я missed.please помощь me.thank вы
Я хочу очистить кеш при нажатии кнопки. Я заменил ваши trimCache() и dleteDir(). еще нет улучшения – GIRIDHARAN
Вы включили onDestroy() в свою деятельность? – sasikumar
Я надул onDestroy() нужен! вызвать trimCache() внутри onClick()? но я не хочу закрывать свою деятельность. – GIRIDHARAN