public static final int AID_APP = 10000;
public static final int AID_USER = 100000;
private String getOomAdj() {
File[] files = new File("/proc").listFiles();
int lowestOomScore = Integer.MAX_VALUE;
String foregroundProcess = null;
int pid = android.os.Process.myPid();
Log.v(TAG, "getOomAdj -------- pid = " + pid);
try {
int userId = 0;
// loop until we get the correct user id.
// 100000 is the offset for each user.
// u{user_id}_a{app_id} is used on API 17+ for multiple user
// account support.
// String uidName = String.format("u%d_a%d", userId, appId);
File oomScoreAdj = new File(String.format(
"/proc/%d/oom_score_adj", pid));
if (oomScoreAdj.canRead()) {
int oomAdj = Integer.parseInt(read(oomScoreAdj
.getAbsolutePath()));
Log.v(TAG, "getOomAdj ----------oomAdj = " + oomAdj);
}
int oomscore = Integer.parseInt(read(String.format(
"/proc/%d/oom_score", pid)));
Log.v(TAG, "getOomAdj ----------oomscore = " + oomscore);
if (oomscore < lowestOomScore) {
lowestOomScore = oomscore;
}
} catch (IOException e) {
e.printStackTrace();
}
return foregroundProcess;
}
private static String read(String path) throws IOException {
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(path));
output.append(reader.readLine());
for (String line = reader.readLine(); line != null; line = reader
.readLine()) {
output.append('\n').append(line);
}
reader.close();
return output.toString().trim();
}
|