2011-12-20 3 views
0

Например, если вы используете соединение с базой данных, потоки или потоки ввода-вывода (все, что требуется для явного закрытия/освобождения), есть ли какой-то стандартный способ сделать это? Возможно, путем внедрения некоторого стандартного интерфейса, так что потребитель Framework/class мог бы вызывать эту логику очистки ресурсов для моего класса?Есть ли стандартный способ прямого закрытия служб и других ресурсов?

Для тех, кто имеет некоторые experiance с .NET Framework аналогом будет IDisposable интерфейса, поэтому, реализующие этот интерфейс, я могу поставить все ресурсосберегающую очистку логики в Dispose() методы так что потребители класса будут иметь возможность проверить, реализует ли экземпляр класса IDisposable интерфейса а затем явно вызовите Dispose().

Есть ли что-то встроенное в Android?

+0

Dup of [этот вопрос] (http://stackoverflow.com/questions/1768095/idisposable-metaphor-in-java), но ответ изменился с помощью Java 7. См. «Автоматическое управление ресурсами» @ http: // stackoverflow.com/questions/213958/new-features-in-java-7 –

+0

Так что же для Android тоже? – sll

ответ

1

Да, услуги и мероприятия имеют жизненные циклы. Когда они «закрыты», вызывается метод onDestroy(). В Android существует несколько методов жизненного цикла, и действительно важно узнать, когда им пользоваться. Это описано на следующих страницах: http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Service.html

Из этих OnDestroy() методы, вы должны закрыть свои ресурсы. Если у вас есть много возможностей для закрытия, вы можете позволить им реализовать интерфейс и хранить эти ресурсы в коллекции, чтобы вы могли прокручивать свои ресурсы при вызове onDestroy.

+0

Как я мог бы перехватить 'onDestroy()' конкретной службы? Например, я использовал 'WifiManager' только для чтения значения логического флага, тогда мне это не нужно, как мне его освободить/закрыть? – sll

+0

Время выполнения Android вызывает 'onDestroy()' для вас. –

+1

Действительно, статьи, которые я вам дал, объясняют это четко. WifiManager является системным сервисом и не займет (большую часть) вашей памяти. Если вам это больше не нужно, просто установите ссылку на null. Вы не можете удалить WifiManager, поскольку он является частью системы, и другое приложение может также использовать его. Android управляет жизненным циклом WifiManager. Все, что вам нужно сделать, это управлять своими рекомендациями. – Jordi