Description
BackgroundActivityMonitor.readAndCompute does
long[] returned = new long[tokenizer.countTokens()]; for (int i = 0; i < tokenizer.countTokens(); i++) returned[i] = Long.parseLong(tokenizer.nextToken());
which is not only inefficient as it counts tokens each time thru the loop, it's wrong in that only the first half of the values are populated in the array, as each time thru the loop the number of tokens goes down by 1, since you've consumed one.
switch the loop to
for (int i = 0; i < returned.length; i++)