Почему целые числа рассматриваются как перечисления в этом фрагменте кода? - PullRequest
0 голосов
/ 10 октября 2019

Я пишу свое первое приложение для Android, следуя инструкциям и ресурсам для разработчиков Android. Мой опыт работы: очевидно, нулевой опыт разработки под Android и небольшой опыт работы с Java. Последнее может быть причиной, почему я застрял.

Итак, взгляните на этот фрагмент кода по обработке разрешений (из https://developer.android.com/training/permissions/requesting):

ActivityCompat.requestPermissions(thisActivity,
    new String[]{Manifest.permission.READ_CONTACTS},
    MY_PERMISSIONS_REQUEST_READ_CONTACTS);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.

Как вы можете видеть, он говорит, что MY_PERMISSIONS_REQUEST_READ_CONTACTS является int-константой.

Затем он показывает реализацию метода обратного вызова onRequestPermissionsResult ():

public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // contacts-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}

Как вы можете видеть, оператор switch обрабатывает requestCode не как int, но похоже, что он обрабатывает его так, как если бы он былEnum. Но если я пытаюсь передать enum в requestPermissions (), он выдает ошибку, потому что сигнатура метода требует, чтобы requestCode был int.

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 октября 2019

Это длинная история. Чтобы быть коротким - производительность и эффективность памяти.

Здесь больше деталей https://android.jlelse.eu/android-performance-avoid-using-enum-on-android-326be0794dc3

А вот видео Google https://www.youtube.com/watch?v=Hzs6OBcvNQE

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

О requestCode, система Android использует только младшие 16 бит. (<65k). Более подробную информацию об этом вы можете найти в классе FragmentActivity, ограничение, необходимое для адресации результата к правильному фрагменту. </p>

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