@hide在Android源代码中的含义是什么?

对于Activity源代码 ,第3898行(接近底部):

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

@hide是什么意思?

我发现我的public class ChildActivity extends Activity { ... }不能使用/看到Activity.isResumed() 。 这是正常的吗? 我怎样才能访问它?

Android有两种不能通过SDK访问的API。

第一个位于包com.android.internal。 第二个APItypes是用@hide javadoc属性标记的类和方法的集合。

隐藏的方法仍然可以通过javareflection访问。 @hide属性只是javadoc的一部分(也就是droiddoc),所以@hide只是简单地表示方法/ class /字段被排除在API文档之外。

例如,ActivityManager.java中的checkUidPermission方法是@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}); 
  1. @hide用于那些由于各种原因需要显示的东西,但不是已发布的API的一部分。 当从源代码中自动提取API时,它们不会被包含在文档中。

  2. 你是对的,你不能重写它。 这是正常的,这是由devise,因为它被标记为final 。 你应该可以使用它,尽pipe编辑可能不会把它展示给你,因为它用@hide标记,你应该注意下面的第3点。

  3. 你不应该使用它,因为它不是API的一部分,开发人员可以随时删除它。 他们甚至可能在自己的权利范围之内,如果他们痛苦地倾向于用自己的方式取代它(尽pipe可能不是严格的法律意义上的)。