0

このスクリプトを作成しましたが、機能しません:

package com.mkyong.android;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import com.example.toast.R;

public class MainActivity extends Activity {


private Button button;

public void onCreate(Bundle savedInstanceState) {
    final Runtime runtime = Runtime.getRuntime();
    try {
        runtime.exec("su");
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab1);


    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        @SuppressLint("SdCardPath")
        @Override
        public void onClick(View arg0) {
            final Runtime runtime = Runtime.getRuntime();
            try {
                runtime.exec("echo 3 > /proc/sys/vm/drop_caches");
                Toast.makeText(MainActivity.this, "Script lanciato con `successo, memoria svuotata.", Toast.LENGTH_LONG).show();`
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}
}

RAMメモリを解放しません:(しかし、ターミナルエミュレータを介して..コマンドを変更しようとすると、たとえば、mkdirでディレクトリを作成すると、ファイルtxtの書き込みさえも行われます..何が問題なのですか?

4

2 に答える 2

0

これを試すことができます。

try {
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "echo 3 > /proc/sys/vm/drop_caches" });
proc.waitFor();
} catch (Exception e) {
Log.d("Exceptions", "Exception dropping caches: "+e);
}

また

            Process p=null;
            try {
                p = new ProcessBuilder()
                .command("PathToYourScript")
                .start();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(p!=null) p.destroy();
            }
于 2013-11-19T13:36:40.617 に答える
0

runtime.exec("su");シェルプロセスを開始しました。そして、あなたの次"runtime.exec("echo 3 > xxx")";は最初のシェルでは実行されません。

私の提案は、java.lang.processに固執し、「su」を実行するプロセスを開始し、リダイレクトされたstdinを使用してコマンドを書き込むことです。

于 2013-04-10T09:18:29.243 に答える