【问题标题】:Drop_caches by app doesn't work应用程序的 Drop_caches 不起作用
【发布时间】:2013-04-01 07:56:51
【问题描述】:

我已经制作了这个脚本,但不起作用:

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.. 有什么问题?

【问题讨论】:

    标签: android shell command runtime


    【解决方案1】:

    你可以试试这个。

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

    【讨论】:

    • 嗨,欢迎来到 SO。很高兴看到答案,但请注意下次提出问题时。这是一个非常古老的问题,不需要任何努力。
    • 您好,感谢您的欢迎。我没有注意到这是一个老问题。不过,我从非常古老的问题中为自己找到了有用的答案。也许这对某人有帮助。写答案也能帮助我更多地了解安卓。
    【解决方案2】:

    您的runtime.exec("su"); 刚刚启动了一个shell 进程。并且您的下一个 "runtime.exec("echo 3 > xxx")"; 不会在第一个 shell 中执行。

    我的建议是坚持使用 java.lang.process,启动一个执行“su”的进程并使用重定向的标准输入向它写入命令。

    【讨论】:

    • 你的意思是说问题基本上是我的外壳在第一(su)之后?所以我的过程不去?我的天哪,我找不到出路 :( 。但是为什么其他命令(mkdir 等)会运行而这个没有呢?太不可思议了!!!
    • 我尝试再次更改并写入:runtime.exec("su -c /free.sh");但什么都没有……我也试过 runtime.exec("su -c '/free.sh'");什么都没有......我也试过 runtime.exec("su -c echo 3 > XXX");但没有任何改变!!!!!!! wtf太难了!我什么都试过了!
    • 当你说NOTHING你的意思是内核没有删除所有的文件缓存?您是否尝试通过在您的 adb shell 上执行此操作来确保它在您的设备上确实有效?
    • 我向你解释我的工作。我编写“free”命令来查看空闲内存,然后启动应用程序,单击按钮,再次“free”命令,没有任何变化......否则我直接从终端启动 shell 我看到了可用内存的差异。有什么问题吗?
    • 正如你昨天写的那样,我认为问题出在 shell 的继承上。首先必须是“su”命令,然后是“echo XXXXXXXX”。 “苏”去,没问题..另一个没有。也许只是我不知道的语法错误..
    猜你喜欢
    • 2016-03-17
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多