Reputation: 179
Below I am showing the first and second activities. The first one is just to show what the baseline memory is. My question is: what is going on in the second activity that is allocating so much memory?!
It should not be working so hard and I can't figure out what it is that is allocating so much memory at that steady pace. It continues to allocate at the rate shown below for the second screen until it runs out. Then I guess the GC gets called and re-allocates memory. Then the memory keeps getting allocated until it runs out again and again.
First Activity Screen:
First Activities Memory:
Second Activity Screen: No buttons have been pressed yet and nothing is being recorded. SignalStrengthListener checks for changes in the LTE parameters and updates the UI once per second. But the memory is going out of control.
Second Activity Memory:
Here is my code for the Second activity and its layout:
Second.java
public class Second extends Activity implements Runnable {
public static SignalStrengthListener signalStrengthListener;
public static TelephonyManager tm;
List<CellInfo> cellInfoList;
public static TextView lteRsrp;
public static TextView lteRsrq, lteCqi;
public static TextView cellPciTextView;
EditText offsetText;
Button startButton, offsetButton;
public static int cellPci = 0;
public static String ltestr;
public static String[] parts;
public static String mydate;
public static double offset = 0.0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
run();
setupUI();
setupButton();
}
private void setupUI() {
lteRsrp = (TextView) findViewById(R.id.lteRsrp);
lteRsrq = (TextView) findViewById(R.id.lteRsrq);
lteCqi = (TextView) findViewById(R.id.lteCqi);
cellPciTextView = (TextView) findViewById(R.id.cellPciTextView);
offsetText = (EditText) findViewById(R.id.offsetText);
startButton = (Button) findViewById(R.id.startButton);
offsetButton = (Button) findViewById(R.id.offsetButton);
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
parts[9] = String.valueOf(Double.parseDouble(parts[9]) + offset);
if (Double.parseDouble(parts[9]) == 2147483647) {
parts[9] = "-141";
}
if (Integer.parseInt(parts[10]) == 2147483647) {
parts[10] = "-21";
}
if (Integer.parseInt(parts[12]) == 2147483647) {
parts[12] = "-20";
}
lteRsrp.setText(String.valueOf(parts[9]));
lteRsrq.setText(String.valueOf(parts[10]));
lteCqi.setText(String.valueOf(parts[12]));
cellPciTextView.setText(String.valueOf(cellPci));
}
});
}
}, 0, 1000);
}
private void setupButton() {
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getBaseContext(), Third.class);
startActivity(intent);
}
});
offsetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
offset = Double.parseDouble(offsetText.getText().toString());
Log.d("TAG", "???????????????????????????????????????????????? offset value is = " + offset);
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
});
}
@Override
public void run() {
// Moves the current Thread into the background
// android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
//start the signal strength listener
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
}
public class SignalStrengthListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(android.telephony.SignalStrength signalStrength) {
((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
ltestr = signalStrength.toString();
parts = ltestr.split(" ");
try {
cellInfoList = tm.getAllCellInfo();
for (CellInfo cellInfo : cellInfoList) {
// Log.d("TAG", "cellInfoList size = " + cellInfoList.size() + " +++++++++++++++++++++++++++++++");
if (cellInfo instanceof CellInfoLte) {
// cast to CellInfoLte and call all the CellInfoLte methods you need
// Gets the LTE PCI: (returns Physical Cell Id 0..503, Integer.MAX_VALUE if unknown)
cellPci = ((CellInfoLte) cellInfo).getCellIdentity().getPci();
}
}
} catch (Exception e) {
// Log.d("SignalStrength", "+++++++++++++++++++++++++++++++ null array spot 3: " + e);
}
mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
super.onSignalStrengthsChanged(signalStrength);
}
}
}
second_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffdc1d">
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="0"
android:textSize="22sp"
android:textColor="#000000"
android:id="@+id/lteRsrp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="29dp"
android:layout_marginTop="80dp"
android:textAlignment="textEnd"
android:background="#ffdc1d"
android:textStyle="bold"
android:layout_marginBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="= LTE RSRP"
android:textSize="22sp"
android:textColor="#000000"
android:id="@+id/textView2"
android:background="#ffdc1d"
android:textStyle="bold"
android:layout_alignTop="@+id/lteRsrp"
android:layout_toEndOf="@+id/lteRsrp"
android:layout_marginLeft="10dp" />
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="0"
android:textColor="#a71b1b"
android:textSize="22sp"
android:id="@+id/lteRsrq"
android:layout_below="@+id/lteRsrp"
android:layout_alignStart="@+id/lteRsrp"
android:textAlignment="textEnd"
android:textStyle="bold"
android:background="#ffdc1d"
android:layout_marginBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="= LTE RSRQ"
android:textSize="22sp"
android:textColor="#a71b1b"
android:id="@+id/textView3"
android:textStyle="bold"
android:background="#ffdc1d"
android:layout_below="@+id/lteRsrp"
android:layout_alignStart="@+id/textView2" />
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="0"
android:textSize="22sp"
android:textColor="#075f09"
android:id="@+id/cellPciTextView"
android:layout_below="@+id/lteRsrq"
android:layout_alignStart="@+id/lteRsrq"
android:textAlignment="textEnd"
android:background="#ffdc1d"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="= LTE PCI"
android:textSize="22sp"
android:textColor="#075f09"
android:id="@+id/textView4"
android:background="#ffdc1d"
android:textStyle="bold"
android:layout_alignTop="@+id/cellPciTextView"
android:layout_alignStart="@+id/textView3" />
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="0"
android:textSize="22sp"
android:textColor="#000000"
android:id="@+id/lteCqi"
android:textAlignment="textEnd"
android:background="#ffdc1d"
android:textStyle="bold"
android:layout_below="@+id/cellPciTextView"
android:layout_alignStart="@+id/cellPciTextView"
android:layout_marginTop="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="= LTE CQI"
android:textSize="22sp"
android:textColor="#000000"
android:id="@+id/textView"
android:background="#ffdc1d"
android:textStyle="bold"
android:layout_alignTop="@+id/lteCqi"
android:layout_alignStart="@+id/textView4" />
<Button
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Start"
android:textColor="#ffdc1d"
android:textSize="22sp"
android:id="@+id/startButton"
android:layout_marginBottom="47dp"
android:background="#f91616"
android:textAlignment="center"
android:textStyle="bold"
android:padding="4dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press the START button to begin recording"
android:id="@+id/textView8"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textColor="#f91616"
android:textSize="22sp"
android:textStyle="italic"
android:textAlignment="center"
android:layout_marginTop="12dp" />
<Button
android:layout_width="120dp"
android:layout_height="60dp"
android:text="Set offset"
android:id="@+id/offsetButton"
android:textColor="#ffdc1d"
android:background="#f91616"
android:textStyle="bold"
android:textSize="18sp"
android:layout_marginBottom="83dp"
android:layout_above="@+id/startButton"
android:layout_alignStart="@+id/textView" />
<EditText
android:layout_width="120dp"
android:layout_height="40dp"
android:id="@+id/offsetText"
android:background="#ffffff"
android:layout_alignBottom="@+id/offsetButton"
android:layout_alignEnd="@+id/lteCqi"
android:text="0.0"
android:textAlignment="center"
android:textColor="#000000"
android:textSize="22sp"
android:textStyle="bold"
android:layout_marginBottom="4dp" />
</RelativeLayout>
Upvotes: 0
Views: 142
Reputation: 1007276
Yeah, I think you got yourself into a bit of an infinite loop there.
At registration, and when a specified telephony state changes, the telephony manager invokes the appropriate callback method on the listener object and passes the current (updated) values.
So, what happened was you called listen()
, which called onSignalStrengthsChanged()
, which called listen()
, which called onSignalStrengthsChanged()
, which called listen()
, which called onSignalStrengthsChanged()
, which called listen()
, which called onSignalStrengthsChanged()
, which called listen()
, which called onSignalStrengthsChanged()
, ...
By removing the listen()
from inside the onSignalStrengthsChanged()
method, you removed the infinite loop.
Upvotes: 2