startActivity: какой метод лучше и почему? - PullRequest
0 голосов
/ 24 января 2019

Хорошо, давайте сделаем это просто.

У меня есть два способа начать действие, отличное от значения по умолчанию startActivity

Один : Использование статического start метода

class LogInActivity : BaseAppCompatActivity() {
    // other activity code goes here
    companion object {
        fun start(context: Context /*,extra params goes here*/) {
            val intent = Intent(context, LogInActivity::class.java)
            // intent.putExtra extra params
            context.startActivity(intent)
        }
    }

}

Two : Использование статического getStartIntent() метода для получения Intent, необходимого для начала действия

class LogInActivity : BaseAppCompatActivity() {

    companion object {

        fun getStartIntent(context: Context /*,extra params goes here*/) : Intent {
            val intent = Intent(context, LogInActivity::class.java) 
            // intent.putExtra extra params
            return intent
        }
    }
}

Вопросы:

  1. Какой метод лучше и почему?

Я видел большинство ресурсов , предлагающих использовать второй метод.В чем может быть причина?

Будет ли утечка памяти в любом из этих методов?

1 Ответ

0 голосов
/ 24 января 2019

Один является скорее шаблоном команды, в то время как Два является своего рода фабричным шаблоном.Хотя оба делают одно и то же (предположительно), есть одна проблема с One : фактически отсутствует контекст вызывающей стороны.Если вам нужна конфигурация на Intent, которая может зависеть от текущего состояния или источника вызова, вы не сможете ее применить.Это может быть исключение из недавних действий или отключение истории или очистка задачи или что-либо еще.

Так что лучше использовать Два , чтобы быть безопасным и последовательным.В любом случае вы не сохраняете ссылку на context, поэтому вы ее не утечете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...