Java Android - либо недостаточно памяти для задания backgroud, либо проблема с GC - PullRequest
0 голосов
/ 30 сентября 2018

Мое приложение для Android должно считывать около 25 КБ из InputStream, который обернут в BufferedReader.Это происходит в фоновом потоке, который общается через обработчик.Но при начале чтения поток кажется заблокированным, и появляется сообщение об отладке:

09-29 22:56:27.837 13625-13640/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 519353(7MB) AllocSpace objects, 0(0B) LOS objects, 77% free, 2MB/10MB, paused 797us total 109.196ms

Я не знаю, как справиться или обойти это, и я не смогнайти что-то полезное в интернете.Я был бы очень благодарен за любые советы или решения.

Вот код и журнал:

Метод:

@Override
public void run() {

    if (request == null)
        return;
    int responseHash = 0;
    int returnCode = 0;
    String timestamp = "0";
    int responseType = 0;
    Object returnObject = "";

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if ((networkInfo == null) || (!networkInfo.isConnectedOrConnecting())) {
        returnCode = 1;
    } else {
        try {
            socket = new Socket(HOST, PORT);
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            pw.println("get " + request);
            pw.flush();
            String responseString = "";
            Log.d("EpOs", "1");
            while (!br.ready());
            int i = 0;
            while (br.ready()){
                Log.d("EpOs", "ln"+i++);
                char c;
                c = (char)br.read();
                if (c != 0)
                    responseString += Character.toString(c);
            }
            Log.d("EpOs", "1.5");
            System.out.println(responseString);
            timestamp = new SimpleDateFormat("E HH:mm").format(new Date());
            switch (request) {
                case "service/vertretungsplan": {
                    try {
                        responseType = 101;
                        SubstituteDay sd = SubstitutePlanGetter.getSubstitutions(responseString)[0];
                    } catch (URISyntaxException | ImplicitLoginException e) {
                        e.printStackTrace();
                        returnCode = 21;
                    }
                    break;
                }
                default: {
                    returnCode = 2;
                }
            }
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
            returnCode = 3;
        }
        Log.d("EpOs", "2");
        Integer rc = returnCode;
        Object[] objects = new Object[3];
        objects[0] = rc;
        objects[1] = timestamp;
        objects[2] = returnObject;
        Message msg = handler.obtainMessage(responseType, objects);
        msg.sendToTarget();
    }

Logcat:

09-29 23:12:42.866 21779-21779/? I/art: Late-enabling -Xcheck:jni
09-29 23:12:43.278 21779-21779/de.jzbor.epos I/InstantRun: starting instant run server: is main process
09-29 23:12:43.476 21779-21779/de.jzbor.epos W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
09-29 23:12:43.533 21779-21779/de.jzbor.epos D/EpOs: Test
09-29 23:12:44.150 21779-21779/de.jzbor.epos I/ViewRootImpl: CPU Rendering VSync enable = false
09-29 23:12:44.153 21779-21804/de.jzbor.epos D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
09-29 23:12:44.215 21779-21804/de.jzbor.epos I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build:  ()
    OpenGL ES Shader Compiler Version: E031.25.03.04
    Build Date: 04/28/15 Tue
    Local Branch: 
    Remote Branch: 
    Local Patches: 
    Reconstruct Branch: 
09-29 23:12:44.217 21779-21804/de.jzbor.epos I/OpenGLRenderer: Initialized EGL, version 1.4
09-29 23:12:44.231 21779-21804/de.jzbor.epos D/OpenGLRenderer: Enabling debug mode 0
09-29 23:12:44.396 21779-21779/de.jzbor.epos W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
09-29 23:12:44.501 21779-21779/de.jzbor.epos I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@69cc367 time:42529086
09-29 23:12:48.039 21779-21829/de.jzbor.epos D/EpOs: 1
09-29 23:12:56.169 21779-21794/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 569396(9MB) AllocSpace objects, 0(0B) LOS objects, 77% free, 2MB/10MB, paused 768us total 112.713ms
09-29 23:13:03.718 21779-21794/de.jzbor.epos I/art: Background partial concurrent mark sweep GC freed 523840(8MB) AllocSpace objects, 0(0B) LOS objects, 83% free, 2MB/14MB, paused 656us total 116.436ms
09-29 23:13:14.916 21779-21794/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 784615(11MB) AllocSpace objects, 0(0B) LOS objects, 77% free, 2MB/10MB, paused 489us total 122.385ms
09-29 23:13:29.955 21779-21794/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 521041(7MB) AllocSpace objects, 0(0B) LOS objects, 77% free, 2MB/10MB, paused 727us total 103.527ms
09-29 23:15:34.196 21779-22644/de.jzbor.epos D/EpOs: 1
09-29 23:16:24.117 21779-21794/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 514462(7MB) AllocSpace objects, 0(0B) LOS objects, 76% free, 2MB/10MB, paused 539us total 101.177ms
09-29 23:17:09.050 21779-21794/de.jzbor.epos I/art: Background sticky concurrent mark sweep GC freed 514702(7MB) AllocSpace objects, 0(0B) LOS objects, 75% free, 2MB/10MB, paused 607us total 106.134ms
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...