我正在使用这些代码在我的 Android 应用程序上运行屏幕截图功能,它能够捕获屏幕截图并将其转换为要使用的位图,但是在运行几次之后。应用程序变得更慢,我不知道为什么
是否是由于这些代码连续运行并在内存中留下进程造成的?如果是这样,我该如何正确关闭它们?
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();
最佳答案
如果您使用的是 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 block 的括号中,两个流将在 try block 末尾自动关闭。
或者,您可以使用 Google Guava 库(顺便说一句,这非常棒)。如果您需要的话,我可以发布该代码,但它位于他们的网站上( https://github.com/google/guava/wiki/ClosingResourcesExplained )
关于java - Android 正确关闭进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169064/