如何利用安卓的"清除缓存"按钮?

15

在Android的设置中,当点击一个应用程序时,在“应用程序管理”活动中,数据被分解为应用程序、数据和缓存。还有一个按钮可以清除缓存。我的应用程序缓存音频文件,我希望用户能够使用此按钮清除缓存。我该如何存储它们,以便它们与缓存一起打包,并且用户可以清除它们?我已经尝试使用以下两种技术来存储文件:

newFile = File.createTempFile("mcb", ".mp3", context.getCacheDir());


newFile = new File(context.getCacheDir(), "mcb.mp3");
newFile.createNewFile();

在这两种情况下,这些文件都被列为“数据”而不是“缓存”。


我也遇到了同样的问题。令人烦恼的是,Eclipse中的Android DDMS不允许我浏览/data文件夹!因此,即使不同的权限启用了“清除缓存”按钮,我也不知道我的文件保存在哪里。 - greenie
2个回答

24

我无法复现你的问题,也许还有其他问题。

使用下面这个应用程序,我能够在缓存目录中创建一个文件,然后使用“设置”下的“管理应用程序”功能清除它。我没有改变清单中的任何内容,并且据我所知,你真的不应该去修改android:allowClearUserData选项

public class CreateCacheFile extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.CreateFileButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File(
                        CreateCacheFile.this.getCacheDir(), "temp.txt");

                try {
                    file.createNewFile();
                    FileWriter fw = new FileWriter(file);
                    BufferedWriter bw = new BufferedWriter(fw);
                    bw.write("Hello World");
                    bw.newLine();
                    bw.close();

                } catch (IOException e) {
                    Toast.makeText(
                            CreateCacheFile.this, 
                            "Error!", 
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

在运行该应用程序(并点击按钮以创建文件)之后:

$ adb -d shell
# ls /data/data/com.example.CreateCacheFile/cache
temp.txt
# cat /data/data/com.example.CreateCacheFile/cache/temp.txt
Hello World
# 

管理应用程序报告缓存已使用4KB空间。在单击清除按钮后:

# ls /data/data/com.example.CreateCacheFile/cache
# cat /data/data/com.example.CreateCacheFile/cache/temp.txt
temp.txt: No such file or directory
# 

此时,“管理应用程序”报告缓存使用了0KB的空间。


你说得对。看起来可以工作。我一定是做错了其他事情。谢谢。 - Jay Askren
在使用getCacheDir()时,是否建议使用Environment.getExternalStorageState()来检查读写能力?还是与此无关? - Jago

5

1
似乎allowClearUserData不起作用,但manageSpaceActivity是个好主意。然而,我仍然希望能够使用清除缓存按钮。http://www.mail-archive.com/android-developers@googlegroups.com/msg16507.html - Jay Askren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接