Я пытаюсь читать данные из последовательного потока Bluetooth В моем андроиде приложения. Данные отправляются обработчику для его отображения. Он отлично работает в течение нескольких минут, а затем прекращает показ данных (приложение продолжает работать). Я думаю, что это имеет отношение к утечкам памяти в моем обработчике, но я не знаю, как ее решить ..утечки памяти в обработчике Android
This is where I found the code
Я буду рад, если кто-то может мне помочь. Спасибо заранее
public class MainActivity extends ActionBarActivity {
static BluetoothAdapter mBluetoothAdapter = null;
static Handler mHandler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Does the device support bluetooth?
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
Toast.makeText(this, "Device does not support Bluetooth",Toast.LENGTH_LONG).show();
}
//Turn on Bluetooth if disabled
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
}
//Get the Bluetooth module device
BluetoothDevice mDevice = null;
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
if(device.getName().equals("HC-06")) {
mDevice = device;
}
}
}
if(mDevice == null){
Toast.makeText(this,"Device not found",Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this,"connected to " + mDevice.getName(),Toast.LENGTH_LONG).show();
ConnectThread mConnectThread = new ConnectThread(mDevice);
mConnectThread.start();
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
byte[] writeBuf = (byte[]) msg.obj;
int begin = (int)msg.arg1;
int end = (int)msg.arg2;
switch(msg.what) {
case 1:
String writeMessage = new String(writeBuf);
writeMessage = writeMessage.substring(begin, end);
ScrollView scrollView1 = (ScrollView) findViewById(R.id.scroll);
TextView textView1 = (TextView) findViewById(R.id.statusText);
textView1.append(writeMessage + "\n");
scrollView1.fullScroll(View.FOCUS_DOWN);
break;
}
}
};
}
}
Вы можете разместить журналы? Чтобы определить, есть ли утечка памяти - посмотрите на свои журналы и отфильтруйте GC_, это будет число, которое будет увеличиваться и уменьшаться. Если число, которое следует за GC_, продолжает расти в ваших журналах - у вас есть утечка памяти, если она идет вверх/вниз, тогда нет утечки памяти, и ваша проблема лежит в другом месте! – Zain
Все мои журналы выглядят следующим образом: несколько немногочисленные номера GC_FOR_ALLOC освобожден 824K, 25% бесплатно 5400K/7172K, приостановлено 4 мс, всего 4 мс –
ОК, так что вы используете память 5.4k/7.7k - то, что вы хотите контролировать, - это 5.4 k продолжает расти, или это снижается (это происходит, когда происходит сбор мусора). Если время от времени происходит, ваша проблема не является утечкой памяти - можете ли вы разместить свои журналы сбоев, что может помочь диагностировать проблема? – Zain