功能说

在国内的Android生态中,所有的APP开发者都是一种流氓的心态,后台服务一大堆,还监听各种广播,导致用户根本不可能完全删除后台服务;有人说既然他们流氓,你不用他们就是,卸载掉啊!!哎,一些主流公司的APP,即使知道他流氓,还真的继续用它,比如支付宝\微信等;

所以采用冻结的方法是最有效,最干净的,只是可惜 pm disable 这个权限Android并没有对普通应用开放,也是一个蛋疼的事情.Android生态也是,申请各种权限不需要root,反而关闭权限需要;

使用冻结APP的场景:

  1. 某些应用开启大量后台服务,导致系统响应缓慢,再不能卸载的情况下,冻结它;
  2. 某些不常用的APP,但是需要的时候重新下载又麻烦,冻结它;
  3. 某些应用后台大量更新数据,消耗流量,冻结它;
  4. 冻结app解冻后,保留所有应用数据,不用担心数据丢失,账号重新登录等;

主要代码实现

冻结APP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void disableApp(String appPackageName){
try {
Process localProcess=Runtime.getRuntime().exec("su");
String cmd="pm disable "+appPackageName+"\n";
DataOutputStream dataOutputStream=new DataOutputStream(localProcess.getOutputStream());
dataOutputStream.writeBytes(cmd);
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
} catch (IOException e) {
e.printStackTrace();
}
}

解冻APP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void enableApp(String appPackageName){
try {
Process localProcess=Runtime.getRuntime().exec("su");
String cmd="pm enable "+appPackageName+"\n";
DataOutputStream dataOutputStream=new DataOutputStream(localProcess.getOutputStream());
dataOutputStream.writeBytes(cmd);
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
} catch (IOException e) {
e.printStackTrace();
}
}