不过自定义Application也并没有什么副作用,它和单例模式二选一都可以实现同样的功能,但是我见过有一些项目,会把自定义Application和单例模式混合到一起使用,这就让人大跌眼镜了。一个非常典型的例子如下所示:

[java] view plaincopy
  1. public class MyApplication extends Application {
  2. private static MyApplication app;
  3. public static MyApplication getInstance() {
  4. if (app == null) {
  5. app = new MyApplication();
  6. }
  7. return app;
  8. }
  9. }

就像单例模式一样,这里提供了一个getInstance()方法,用于获取MyApplication的实例,有了这个实例之后,就可以调用MyApplication中的各种工具方法了。

但是这种写法对吗?这种写法是大错特错!因为我们知道Application是属于系统组件,系统组件的实例是要由系统来去创建的,如果这里我们自己去new一个MyApplication的实例,它就只是一个普通的Java对象而已,而不具备任何Context的能力。有很多人向我反馈使用 LitePal 时发生了空指针错误其实都是由于这个原因,因为你提供给LitePal的只是一个普通的Java对象,它无法通过这个对象来进行Context操作。

那么如果真的想要提供一个获取MyApplication实例的方法,比较标准的写法又是什么样的呢?其实这里我们只需谨记一点,Application全局只有一个,它本身就已经是单例了,无需再用单例模式去为它做多重实例保护了,代码如下所示:

[java] view plaincopy
  1. public class MyApplication extends Application {
  2. private static MyApplication app;
  3. public static MyApplication getInstance() {
  4. return app;
  5. }
  6. @Override
  7. public void onCreate() {
  8. super.onCreate();
  9. app = this;
  10. }
  11. }

getInstance()方法可以照常提供,但是里面不要做任何逻辑判断,直接返回app对象就可以了,而app对象又是什么呢?在onCreate()方法中我们将app对象赋值成this,this就是当前Application的实例,那么app也就是当前Application的实例了。

android application常见错误相关推荐

  1. Android 开发常见错误

    大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Appl ...

  2. android应用常见错误

    一.错误:Unknown host api.tudou.com, throwing UnknownHostException. 解决办法:在AndroidManifest.xml中添加<uses ...

  3. cocos2d-lua 3.5 android搭建常见错误

    新建一个项目,就不说了,就是用命令行 cocos new HelloLua -p com.wwj.hellolua -l lua -d ~/Cocos2dxProj ,生成下 然后把项目导入eclip ...

  4. linux编译安装的报错,linux编译安装时常见错误解决办法

    This article is post on https://coderwall.com/p/ggmpfa 原文链接:http://www.bkjia.com/PHPjc/1008013.html ...

  5. NDK编译php,Android NDK编译常见错误及解决方案

    Android NDK编译常见错误及解决方案 Error 1:$ ndk-build/cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hello ...

  6. Android NDK开发(三)——常见错误集锦以及LOG使用,androidndk

    Android NDK开发(三)--常见错误集锦以及LOG使用,androidndk 转载请注明出处:http://blog.csdn.net/allen315410/article/details/ ...

  7. android中ndk编译错误,Android NDK编译常见错误及解决方案

    Android NDK编译常见错误及解决方案 Error 1:$ ndk-build/cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hello ...

  8. Android 源码编译及常见错误及解决方法

    Android 源码编译及常见错误及解决方法 参考文章: (1)Android 源码编译及常见错误及解决方法 (2)https://www.cnblogs.com/kyyblabla/p/360393 ...

  9. Android开发各类常见错误解决方案

    本文属于个人平时项目开发过程遇到的一些问题,记录下来并总结解决方案,希望能帮到大家解决问题,有些问题的解决方案是在StackoverFlow上找到的,建议大家遇到问题多去上面找,基本上都能找到解决方案 ...

最新文章

  1. 【100题】第十五题(树的镜像问题)
  2. 记录一下HALCON检测螺钉是否存在
  3. 关于tcp和http
  4. CentOS 7源码安装httpd服务
  5. MySQL触发器的使用
  6. 对DotNet分布式应用搭建的考虑(引用)
  7. Sql Server事务日志
  8. java 课后习题 三角形面积计算
  9. C++ 双端队列deque
  10. 六年级下册百分数计算题_六年级数学上册期末试卷(附答案)
  11. 解决scrollView上subView下移20point问题的一种方式
  12. Monad B2 For Dotnet Framework 2.0 RC/RTM Released!
  13. 印度孵化器的红利期才刚到,但花样还真不少
  14. 构建自己企业的邮箱验证服务
  15. 怎么自费出书方法步骤
  16. 圣杯布局和双飞翼布局
  17. 提交您的博客到各大网站
  18. 日语假名小写怎么打出来?
  19. 大数据信息资料采集:淘宝飞猪旅游酒店客栈旅社公寓数据信息采集
  20. TCP/IP系列之数据链路层

热门文章

  1. Ellipse函数画圆
  2. Bagging和Boosting 概念及区别
  3. WebView 上传文件 WebChromeClient之openFileChooser函数
  4. 杭电1754--I Hate It(线段树)
  5. 通过Android重审GET和POST请求
  6. 《塞洛特傳說》道具系统
  7. 蓝桥杯 基础练习 十进制转十六进制(水题,进制转换)
  8. VMware记录(一)- vCenter Server 服务安装提示无法解析此完全限定域名
  9. JavaScript——this、constructor、prototype
  10. 算法73----用户喜好