[英]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.