美文网首页
隐藏类 Singleton

隐藏类 Singleton

作者: 一个追寻者的故事 | 来源:发表于2020-04-25 10:26 被阅读0次

    Android 中有两类API,不能通过SDK访问。

    • com.android.internal 中的API,称之为 Internal API
    • 被标记为 @hide 的属性、类和方法,这是被隐藏的API,称之为 Hidden API

    这些API 隐藏的可能原因:
    1、涉及系统安全,所以不想让开发人员直接使用。
    2、这些hide的API不保证往后兼容。

    为什么这两类API不能通过SDK访问?

    sdk/platforms/android-version/android.jar 被进行了处理,在这个 jar 中默认移除了所有这些隐藏的 类或者方法,我们开发时无法访问到。

    为什么使用反射就能够调用这些类和方法?

    我们在Android 设备上,使用的并不是跟我们SDK中相同的jar,运行时会加载 /system/framework/framework.jar framework.jar 和 android.jar 唯一的区别是有没有移除 internal API 和 hidden API

    Singleton

    具体位置:
    frameworks/base/core/java/android/util/Singleton.java

    package android.util;
    
    /**
     * Singleton helper class for lazily initialization.
     *
     * Modeled after frameworks/base/include/utils/Singleton.h
     *
     * @hide
     */
    public abstract class Singleton<T> {
        private T mInstance;
    
        protected abstract T create();
    
        public final T get() {
            synchronized (this) {
                if (mInstance == null) {
                    mInstance = create();
                }
                return mInstance;
            }
        }
    }
    

    这是一个 单例 工具类 ,我们写个例子使用一下这个工具。

    定义实体类
    public class Person {
        public int age;
        public String name;
    }
    
    使用
        Singleton<Person> singleton = new Singleton<Person>() {
            @Override
            Person create() {
                return new Person();
            }
        };
    
        Person person = singleton.get();
        Person person1 = singleton.get();
        Person person2 = singleton.get();
        Person person3 =  singleton.get();
        Person person4 =  singleton.get();
        Person person5 =  singleton.get();
    
    结果

    参考
    https://blog.csdn.net/hp910315/article/details/77749414

    扩展阅读:
    https://commonsware.com/blog/2018/01/18/think-hard-about-hide.html
    https://github.com/anggrayudi/android-hidden-api

    相关文章

      网友评论

          本文标题:隐藏类 Singleton

          本文链接:https://www.haomeiwen.com/subject/njjhwhtx.html