我正在使用这些代码在我的Android应用程序上运行screencap功能,它能够捕获screencap并将其转换为要使用的位图,但是在运行它几次之后。应用程序变慢,我不知道为什么
这些代码是否连续运行并将进程留在内存中?如果是这样,我该如何正确关闭它们呢?
Process process = Runtime.getRuntime().exec("su");
OutputStreamWriter outputStream = new OutputStreamWriter(process.getOutputStream());
outputStream.write("/system/bin/screencap -p\n");
outputStream.flush();
Bitmap screen = BitmapFactory.decodeStream(process.getInputStream());
outputStream.write("exit\n");
outputStream.flush();
outputStream.close();
答案 0 :(得分:0)
如果您使用的是jdk 7,则可以使用try-with-resources方法:
Process process = Runtime.getRuntime().exec("su");
try (OutputStream out = process.getOutputStream();
InputStream in = process.getInputStream()) {
OutputStreamWriter outputStream = new OutputStreamWriter(out);
outputStream.write("/system/bin/screencap -p\n");
outputStream.flush();
outputStream.write("exit\n");
Bitmap screen = BitmapFactory.decodeStream(in);
}
通过将InputStream
和OutputStream
放在try块的括号中,两个流将在try块的末尾自动关闭。
或者您可以使用Google Guava库(这很棒,顺便说一句)。如果您需要,我可以发布该代码,但是可以在其网站上发布(https://github.com/google/guava/wiki/ClosingResourcesExplained)