2016-03-23 7 views
1

私はこれらのコードを使用してアンドロイドアプリでスクリーンキャプチャ機能を実行していますが、スクリーンキャップをキャプチャして使用するビットマップに変換できます。アプリケーションが遅くなり、私は理由が分かりません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(); 
+0

あなたはこれのような何かをしていないのですか? http://stackoverflow.com/a/5651242/608347 –

+2

プロセスが終了したら、プロセスを終了する必要があります。 'process.destroy();'これにより、関連するすべてのストリームも閉じます。 –

答えて

0

あなたは、JDK 7を使用している場合は、試し-と資源アプローチを使用することができます

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); 
} 

tryブロックの括弧内InputStreamOutputStreamを置くことによってし、両方のストリームを自動的に閉じられますtryブロックの終わりです。

また、Google Guavaライブラリ(素晴らしいですが、btw)を使用することもできます。私はあなたがそれを必要とすればそのコードを掲示することができますが、ここに彼らのサイト(https://github.com/google/guava/wiki/ClosingResourcesExplained

+0

私もプロセスを終了する必要がありますか? –

+0

私はあなたが完了したら、あなたはそのプロセスを殺したいと思うでしょう。はい。 'process#destroy()' –

関連する問題