Что означает @hide в исходном коде Android?
на Activity
исходный код, строка 3898 (ближе к нижней части):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
Что значит @hide
в смысле?
я нашла свою public class ChildActivity extends Activity { ... }
не может использовать/см. Activity.isResumed()
. Это нормально? Как я могу получить к нему доступ?
2 ответа:
Android имеет два типа API, которые не доступны через SDK.
первый находится в пакете com.андроид.внутренний. Второй тип API-это набор классов и методов, отмеченных символом @скрыть атрибут javadoc.
скрытые методы все еще могут быть доступны через отражение java. Атрибут @hide является только частью javadoc (также droiddoc), поэтому @hide просто означает, что метод/класс/поле исключается из документов 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; }
однако, мы можем назвать его отражением.
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. Так что называть это размышлением сейчас очень неохотно. Пожалуйста, имейте это в виду.
@hide
используется для вещей, которые должны быть видны по разным причинам, но не часть опубликованного API. Они не будут включены в документацию, когда он автоматически извлекает API от источника.вы правы, вы не можете переопределить его. Это нормально, это по дизайну, так как он помечен как
final
. Вы должны быть в состоянии использовать это, хотя редактор не может показать его вам как один из выбор в любом intellisense он использует, потому что он отмечен@hide
, а вы должны принять к сведению пункт 3 ниже.вы должны не используйте его вообще, так как он не является частью API, и разработчики могут удалить его, когда захотят. Они даже были бы в пределах своих прав, если бы они были склонны к садизму, чтобы заменить его функцией, которая замуровала устройство, на котором он работал (хотя, возможно, не в строгом юридическом смысле).