Безопасно ли вводить контекст?Кинжал, предупреждение Android Studio - PullRequest
0 голосов
/ 11 октября 2018

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

Я ввожуКонтекст приложения с Dagger выглядит так:

AppModule:

@Singleton
@Provides
fun provideContext(application: Application): Context {
    return application
}

ViewModel:

// Injected context provided by Dagger
@Inject
lateinit var mContext: Context

Android Studio по-прежнему выдает это предупреждение в поле введенного контекста:

В этом поле просачивается объект контекста

Действительно ли это утечка объекта контекста, или Android Studio просто не может определить, что это контекст приложения, который вводится, и я должен игнорироватьпредупреждение?Нужно ли вводить это как слабую ссылку?Спасибо.

1 Ответ

0 голосов
/ 11 октября 2018

Технически вы не можете утечь контекст приложения, потому что контекст приложения доступен, пока приложение работает.(Вид, который требует пояснений).

Самый простой способ - игнорировать предупреждение, оно не доставит вам неприятностей.

Если вы все еще хотите исправить предупреждение, вы можете ввестиWeekReference контекста.(WeekReference).Это, вероятно, решит вашу проблему, но перед каждым использованием контекста потребуется проверка на ноль.

Кроме того, если вы используете Android LiveCycle ViewModel, вы должны знать, что вы можете использовать AndroidViewModel (вместо простогоViewModel), который потребует передачи экземпляра контекста в конструктор, и вы можете использовать его вместо контекста приложения.

...