У меня есть EventBus()
, который запускается и зацикливается до тех пор, пока он не перейдет к моему другому Fragment
при запуске моего приложения.когда я бездействую приложение не менее 30 ++ минут, я получаю следующую трассировку стека:
10-11 10:23:46.315 3790-4797/com.jti.mikee.jti_pos W/libc: pthread_create failed: couldn't allocate 1040384-byte stack: Out of memory
10-11 10:23:46.315 3790-4797/com.jti.mikee.jti_pos E/dalvikvm: pthread_create (stack size 16384 bytes) failed: Try again
Я также использую ScheduleExecutorService()
на onCreateView()
scheduledExecutorService = Executors.newScheduledThreadPool(4);
Этообъявление моего EventBus()
public static final Runnable mRunnable = new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(new EB_TapCard());
}
};
и на моем onResume()
это код
@Override
public void onResume() {
Log.e("current_module",current_module);
super.onResume();
try {
EventBus.getDefault().register(this);
rfscanner = scheduledExecutorService.scheduleAtFixedRate(mRunnable, 0, 2, TimeUnit.SECONDS);
} catch (Throwable e) {
e.printStackTrace();
}
}
и, наконец, это мой onPause()
метод
@Override
public void onPause() {
try {
getContext().unregisterReceiver(broadcastReceiver);
} catch (Throwable e) {
e.printStackTrace();
}
rfscanner.cancel(true);
EventBus.getDefault().unregister(this);
super.onPause();
}
Мне интересно, что когда я бездействую мое устройство, Runnable все еще работает.Как я могу приостановить / возобновить это?очень ценится.
EDIT
На данный момент я попытался добавить функцию Callback()
.Работает хорошо, но после того, как я нажимаю на карту, устройство чтения карт не читает вторую карту.как я могу сделать это без заполнения памяти ??
class CallBackThread extends Thread {
@Override
public void run() {
try {
RFCardInterface.waitForCardPresent(RFCardInterface.CONTACTLESS_CARD_MODE_AUTO, 1, -1);
if (RFCardInterface.isCallBackCalled &&
RFCardInterface.notifyEvent.eventID == RFCardInterface.CONTACTLESS_CARD_EVENT_FOUND_CARD) {
IDCatcher = StringUtility.ByteArrayToString(RFCardInterface.notifyEvent.eventData,
RFCardInterface.notifyEvent.eventData.length);
IDCatcher = IDCatcher.substring(9, 21).replace(" ", "");
Log.e("IDCatcher", IDCatcher);
EventBus.getDefault().post(new EBTest2());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}