Что означает @hide в исходном коде Android?

Для исходного кода Activity , строка 3898 (рядом со дном):

 /** * @hide */ public final boolean isResumed() { return mResumed; } 

Что означает @hide ?

Я обнаружил, что мой public class ChildActivity extends Activity { ... } не может использовать / see Activity.isResumed() . Это нормально? Как я могу получить к нему доступ?

Android имеет два типа API, которые недоступны через SDK.

Первый находится в пакете com.android.internal. Второй тип API – это набор classов и методов, которые отмечены атрибутом @hide javadoc .

Скрытые методы могут быть доступны через java-reflection. Атрибут @hide – это всего лишь часть javadoc (droiddoc), поэтому @hide просто означает, что поле method / class / исключено из документов API.

Например, метод checkUidPermission в ActivityManager.java является @hide.

 /** @hide */ public static int checkUidPermission(String permission, int uid) { try { return AppGlobals.getPackageManager() .checkUidPermission(permission, uid); } catch (RemoteException e) { // Should never happen, but if it does... deny! Slog.e(TAG, "PackageManager is dead?!?", e); } return PackageManager.PERMISSION_DENIED; } 

Однако мы можем назвать это reflectionм.

 Class c; c = Class.forName("android.app.ActivityManager"); Method m = c.getMethod("checkUidPermission", new Class[] {String.class, int.class}); Object o = m.invoke(null, new Object[]{"android.permission.READ_CONTACTS", 10010}); 

Обновление. Опубликованная в блоге публикация Google указывает, что она начинает ограничивать доступ к недокументированным или скрытым API-интерфейсам в Android. Поэтому называть его рефлексией сейчас очень не рекомендуется. Помните об этом.

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

  2. Вы правы, вы не можете переопределить его. Это нормально, это по дизайну, так как оно отмечено как final . Вы должны иметь возможность использовать его, хотя редактор может не показывать его вам как один из вариантов в любом использовании intellisense, поскольку он помечен как @hide , и вы должны принять к сведению пункт 3 ниже.

  3. Вы не должны использовать его вообще, так как он не является частью API, и разработчики могут удалить его, когда захотят. Они даже были бы в пределах своих прав, если бы они были настроены с садизмом, чтобы заменить его функцией, которая запирала устройство, на котором оно работало (хотя, возможно, не в строгом юридическом смысле).

  • Android: как заставить активность возвращать результаты деятельности, которая его вызывает?
  • Android: захват возврата активности
  • Режим запуска «single top» для Android и onNewIntent
  • onActivityResult не вызывается в fragmentе
  • Как управлять «startActivityForResult» на Android?
  • Как программно открыть меню опций?
  • Где / Как getIntent (). GetExtras () в Android Fragment?
  • Текст Android-центра на canvasе
  • Android. Фрагмент getActivity () иногда возвращает null
  • ViewPager wrap_content не работает
  • Уведомление: активность уже открыта
  • Давайте будем гением компьютера.