分析每个函数占用的CPU时间,调用次数,函数调用关系等时,常使用
Debug.startMethodTracing("my");
Debug.stopMethodTracing();。
但是发现有些机型会报一些异常,
Unable to open trace file '/sdcard/my.trace': Permission denied
这主要是由于:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中;
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件;
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入;
android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);或将文件的路径改为:/data/data/<package name>/itcast.txt
比如在开源的MJAndroid项目中:在src/MicroJobs.java中的oncreate函数中将Debug.startMethodTracing(x),可以修改为Debug.startMethodTracing("/data/data/com.microjobsinc.mjandroid/x.trace");修改后即可正常显示。