繁体   English   中英

清理数据占用太多内存,android

[英]cleaning data takes too much memory android

我正在尝试使用以下代码段清除50个浏览器(根)的数据。 但是,该过程过于昂贵,并且滞后于我的笔记3,有时会在较旧的设备上崩溃。 我如何使此过程消耗更少的资源? 我假设每个人都有大约3个浏览器,但清除了50个。

private void clearData1() {
    // UC
    String cmd = "pm clear com.UCMobile.intl";
    String cmd1 = "pm clear com.UCMobile";
    String cmd2 = "pm clear com.uc.browser.en";
    String cmd3 = "pm clear com.UCMobile.internet.org";
    String cmd4 = "pm clear uc.ucdl";
    // stock
    String cmd5 = "pm clear com.sec.android.app.sbrowser";
    String cmd6 = "pm clear com.htc.sense.browser";
    String cmd7 = "pm clear com.android.browser";
    // CM
    String cmd8 = "pm clear com.ksmobile.cb";
    // firefox
    String cmd9 = "pm clear org.mozilla.firefox";
    String cmd10 = "pm clear org.mozilla.firefox_beta";

    ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true)
            .command("su");
    Process p = null;
    try {
        p = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
    StreamReader stdoutReader = new StreamReader(p.getInputStream(),
            CHARSET_NAME);
    stdoutReader.start();
    out = p.getOutputStream();
    try {
        out.write((cmd + "\n").getBytes(CHARSET_NAME));
        out.write((cmd1 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd2 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd3 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd4 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd5 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd6 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd7 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd8 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd9 + "\n").getBytes(CHARSET_NAME));
        out.write((cmd10 + "\n").getBytes(CHARSET_NAME));

    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try {
        out.write(("exit" + "\n").getBytes(CHARSET_NAME));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        p.waitFor();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    String result = stdoutReader.getResult();
}

程式码片段

private class ClearData extends AsyncTask < Void, Void, String > {
    protected String doInBackground(Void...voids) {
        // UC
        String cmd = "pm clear com.UCMobile.intl";
        String cmd1 = "pm clear com.UCMobile";
        String cmd2 = "pm clear com.uc.browser.en";
        String cmd3 = "pm clear com.UCMobile.internet.org";
        String cmd4 = "pm clear uc.ucdl";
        // stock
        String cmd5 = "pm clear com.sec.android.app.sbrowser";
        String cmd6 = "pm clear com.htc.sense.browser";
        String cmd7 = "pm clear com.android.browser";
        // CM
        String cmd8 = "pm clear com.ksmobile.cb";
        // firefox
        String cmd9 = "pm clear org.mozilla.firefox";
        String cmd10 = "pm clear org.mozilla.firefox_beta";
        ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true)
            .command("su");
        Process p = null;
        try {
            p = pb.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        StreamReader stdoutReader = new StreamReader(p.getInputStream(),
            CHARSET_NAME);
        stdoutReader.start();
        out = p.getOutputStream();
        try {
            out.write((cmd + "\n").getBytes(CHARSET_NAME));
            out.write((cmd1 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd2 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd3 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd4 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd5 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd6 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd7 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd8 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd9 + "\n").getBytes(CHARSET_NAME));
            out.write((cmd10 + "\n").getBytes(CHARSET_NAME));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            out.write(("exit" + "\n").getBytes(CHARSET_NAME));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            p.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String result = stdoutReader.getResult();
        return result;
    }
    protected void onPostExecute(String result) {
        //Do what you want with the result
    }
}

然后使用以下代码调用该子类: new ClearData().execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM