От экранного рендеринга, когда ноутбук завершает работу экрана?

По существу, у вас есть утечка памяти, которая вызвана не отмененным предыдущим Timer и сохранением ссылки на переменную count. Вот почему, даже когда Activity уничтожается, ваш старый таймер все еще увеличивает старую переменную count, и когда активность воссоздается, появится новый объект Timer и новая переменная count. Поэтому вы увидите 2 счетчика одновременно.

Решение - отменить таймер, когда активность уничтожена:

@Override
protected void onDestroy() {
    super.onDestroy();
    timer.cancel();
}

Если вы хотите узнать больше об утечках памяти, вы можете проверить эту статью.

11
задан shoosh 26 December 2008 в 20:25
поделиться

3 ответа

Я не уверен, что ОС Вы идете, но окна отправляет сообщение, что она собирается ввести новое состояние электропитания. Можно прислушаться к этому и затем или начать обрабатывать на ЦП или отклонять просьбу вводить более низкое состояние электропитания.

9
ответ дан 3 December 2019 в 07:14
поделиться

В пользу пользователей Linux, встречающихся с подобной проблемой, я думал, что добавлю, что, можно получить подобные уведомления и подавить изменения состояния электропитания с помощью API DBUS. Сценарий в качестве примера в Python, взятом из ссылки, для запрещения изменения состояния электропитания:

#!/usr/bin/python
import dbus
import time
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
devobj = bus.get_object('org.freedesktop.PowerManagement', 
                        '/org/freedesktop/PowerManagement')
dev = dbus.Interface (devobj, "org.freedesktop.PowerManagement.Inhibit")
cookie = dev.Inhibit('Nautilus', 'Copying files from /media/SANVOL')
time.sleep(10)
dev.UnInhibit(cookie)
8
ответ дан 3 December 2019 в 07:14
поделиться

iPhone - Связь iPhone также может быть выполнена по bluetooth с помощью GameKit .

-121--4156414-

Вы можете написать собственный метод расширения, если используете C # 3 +, чтобы помочь вам с этим. Этот код прошел некоторые базовые тесты, чтобы убедиться, что он работает:

public static void AddRange<T>(this ObservableCollection<T> coll, IEnumerable<T> items)
{
    foreach (var item in items)
    {
        coll.Add(item);
    }
}
-121--1597717-

Согласно MSDN, существует API, который позволяет приложению сообщить Windows, что он все еще работает и что Windows не должна переходить в спящий режим или выключать дисплей.

Функция называется SetThreadExecityState ( MSDN ). Он работает на меня, используя флаги ES _ SYSTEM _ REQUIRED и ES _ CONTINUOUS .

Однако обратите внимание, что использование этой функции не останавливает запуск заставки, что может помешать работе приложения OpenGL, если заставка также использует OpenGL (oder Direct3D).

0
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: