美文网首页
Android面试记录#1:Android中单例模式的作用范围

Android面试记录#1:Android中单例模式的作用范围

作者: FireflieX | 来源:发表于2018-09-14 13:39 被阅读0次

面试中被问到了老生常谈的单例模式,之前看得比较浅,只觉得单例模式保证对象的全局唯一性,那么这个“全局唯一性”针对一个App的全局,还是一个Activity呢?
直接写了一个demo来测试:两个activity,一个单例类:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Singleton singleton = Singleton.getInstance();
        Log.i("single","in main, singleton: "+singleton.toString());
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Singleton anotherSingleton = Singleton.getInstance();
                        Log.i("single","in main new thread, singleton: "+anotherSingleton.toString());
                    }
                }).start();
            }
        });
    }
}

SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Singleton singleton = Singleton.getInstance();
        Log.i("single","in second, singleton: "+singleton.toString());
    }
}

Log中的输出结果

09-14 13:34:51.909 21088-21088/com.example.fireflies.testapplication I/single: in main, singleton: com.example.fireflies.testapplication.Singleton@1eb0de7
09-14 13:35:12.549 21088-21262/com.example.fireflies.testapplication I/single: in main new thread, singleton: com.example.fireflies.testapplication.Singleton@1eb0de7
09-14 13:35:12.604 21088-21088/com.example.fireflies.testapplication I/single: in second, singleton: com.example.fireflies.testapplication.Singleton@1eb0de7

运行后发现,两个Activity中的singleton对象都是同一个。

结论:单例模式中的全局唯一对应的是整个APP,比如你在一个activity中已经创建了单例类的实例,在没有被回收的境况下,在另一个activity中去get这个实例,还是同一个对象,也即单例的全局唯一性。

至于MainActivity中为何button点击会另外创建一个线程,是因为MainActivity和SecondActivity虽是两个Activity类,但他们仍然运行在同一个线程中,即UI线程,之前一直以为两个类应该是两个线程,其实不是。因此在MainActivity中再去创建一个线程,同时访问singleton对象,发现仍然是同一个,更能证明单例的范围是整个App,即使是多线程环境。

相关文章

  • Android面试记录#1:Android中单例模式的作用范围

    面试中被问到了老生常谈的单例模式,之前看得比较浅,只觉得单例模式保证对象的全局唯一性,那么这个“全局唯一性”针对一...

  • LayoutInflater源码分析

    在《(-)Android中的单例模式》分析中,我们分析了Android中单例模式的实现,且以LayoutInfla...

  • Android 中的单例模式

    Android 中的单例模式 概述 单例模式算是我接触设计模式这种思想所学习的第一个设计模式。记得刚入行时面试,面...

  • Android 单例模式学习

    android的单例模式学习 1 饿汉单例模式 优点 : 缺点 : 2.0 懒汉模式 优点 : 缺点 : 2.1 ...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android 设计模式之简单工厂模式

    设计模式系列文章 Android 设计模式之单例模式 Android 设计模式之Builder模式 Android...

  • 简单聊聊单例模式

    单例模式应该是Android开发中常用的一种设计模式。不仅我们经常用到,Android源码中也经常可以看到单例模式...

  • JAVA基础之单例

    JAVA单例的几种形式以及其优缺点。 Android 中的单例模式 - 简书 单例的定义:Singleton模式的...

  • 单例模式Singleton

    这是我在学习《Android源码设计模式解析和实战》过程中对单例模式作一个记录。方便以后随时翻看。单例模式是应用最...

  • Android 中的 23 种设计模式

    系列笔记 通过学习 Android 的设计模式而记的笔记。(持续更新中...) 源码地址 Android 单例模式...

网友评论

      本文标题:Android面试记录#1:Android中单例模式的作用范围

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