本文共 998 字,大约阅读时间需要 3 分钟。
0、相关文章:
阅读量2w,9赞:
阅读量712,1赞:
1、正文:
这几天处理项目中视频语音偶尔初始化不了的问题,经历了半天的调试,发现调用Application的内容时经常传递空值。经过仔细查阅代码后,发现前任程序员使用了应用单例模式的实现方式:
public class App extends Application {
private static App app; public static App getInstance() { if (app == null) { app = new App(); } return app; } }然而,经过查阅资料后发现,这种严格的单例模式并不适用于Application类。Application类具有独特的特性,在不自定义子类的情况下,系统会为每个APP创建一个默认的实例。其生命周期与APP的生命周期紧密相关,一般情况下无需采用传统的单例模式。
关于对Application类的理解:
每个APP都有一个Application实例:如果我们没有继承Application子类自定义它的话,APP会创建一个默认的实例。
Application实例与APP的生命周期保持一致:在APP启动时,会首先实例化Application,然后才是主入口的Activity或Service等。
Application与APP“同生共死”:在一个APP的生命周期内,只实例化一次,因此天生具备单例特性,无需额外实现单例模式。
不建议直接继承Application类来实现单例:通常情况下,若需要自定义全局单例,可以使用静态单例类实现。若需要获取Context,可以通过Context.getApplicationContext()获取。
然而,Application类远不止单例功能这么简单。它承担着更多重要职责。
于是,改进后的代码如下:
public class App extends Application {
private static App mInstance = null; public static App getInstance() { return mInstance; } @Override public void onCreate() { super.onCreate(); mInstance = this; } }转载地址:http://fnvtz.baihongyu.com/