@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});
-
@hide
用于那些由于各种原因需要显示的东西,但不是已发布的API的一部分。 当从源代码中自动提取API时,它们不会被包含在文档中。 -
你是对的,你不能重写它。 这是正常的,这是由devise,因为它被标记为
final
。 你应该可以使用它,尽pipe编辑可能不会把它展示给你,因为它用@hide
标记,你应该注意下面的第3点。 -
你不应该使用它,因为它不是API的一部分,开发人员可以随时删除它。 他们甚至可能在自己的权利范围之内,如果他们痛苦地倾向于用自己的方式取代它(尽pipe可能不是严格的法律意义上的)。