Android开发技巧:Application和Instance

简介:

学习Android开发有一段时间了,一直没有总结写点文章,一来是网上相关的技术文章已经很多了,难以写出新意;另一方面,想多积累多沉淀一些,随着学习的加深,慢慢总会发现前面掌握的知识比较片面,许多功能的实现,总能找到更好的解决方案。


今天开始我的Android开发笔记的第一篇文章吧,写一点Android开发过程中掌握的一些小技巧,有的是自己总结出来的,有的是从其他人的博客中学到的,也有一些是在一些开源的Android项目中见到的,分享在此,供初学者借鉴,也欢迎留言探讨。


在开发过程中,我们经常会需要用到一些全局的变量或者全局的“管理者”,例如QQ,需要有一个“全局的管理者“保存好友信息,各个activity即可直接通过该”管理者“来获取和修改某个好友信息,显然,这样的一个好友信息,保存到某一个具体的activity里面,然后依靠activity的intent来传递参数是不合适。我们有两种方法来实现这样一个全局的管理者,一种是使用C++/Java中常用的单例模式,另一种是利用Android的Application类,下面一一阐述。


单例模式在面向对象的开发中很常见,我也不详细描述,简单地给出实现的代码示例吧:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  class  QQInfoManager {
     private  static  final  QQInfoManager mInstance =  new  QQInfoManager();
       
     private  QQInfoManager() {
     }
     public  static  QQInfoManager getInstance() {
         return  mInstance;
     }
     public  boolean  funcA() {
         return  true ;
     }
                                                                                                                                                        
     ......
}

各个activity想要使用该类对象,通过QQInfoManager.getInstance() 来使用即可。


唯一要说明的就是这种单例模式的实现方式与下面这种单例模式的实现方式的区别:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  class  QQInfoManager {
                                                              
     private  static  QQInfoManager mInstance =  null ;
                                                        
     public  static  QQInfoManager getInstance() {
                                                      
         if (mInstance== null ) {
             mInstance =  new  QQInfoManager();
         }
         return  mInstance;
     }
                                                            
     public  boolean  funcA() {
        return  true ;
   }
}


第二种单例模式的实现思路,是在第一次使用该类对象的时候来才创建,这样的好处在于节省程序启动动时间和内存空间,如果程序运行过程中一直没有使用该类对象,则内存中不会创建该对象。而第一种方式在程序启动的时候就在内存中创建好了该对象,直到程序结束。但是,第二种方式也有弊端,它并不是线程安全的,在多线程中,如果两个线程同时第一次使用该类对象,则可能会产生意想不到的结果。


下面说下Application方式的实现。


Application类是Android提供的保存全局变量的类,其实该类的onCreate方法是整个Android程序真正的入口。该类对象会在程序启动时被创建,直到程序结束。我们可以通过继承该类来实现全局数据的管理,同时,也可以通过重载该类的方法,在程序的各个生命期插入我们期望的代码。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import  android.app.Application;
public  class  QQApplication  extends  Application {
                                                                                                                                 
         @Override
         public  void  onCreate() {
             //应用程序启动时被系统调用
         }
                                                                                                                                  
         @Override
         public  void  onTerminate() {
             //应用程序退出时会被系统调用
         }
                                                                                                                                  
         //示例函数
         public  boolean  funcA(){
            return  true ;
        }
}


这样定义了还不够,还需要到工程的 AndroidManifest.xml中,在 <application> 标签中,添加一项:


1
android:name= ".QQApplication"


这样定义以后 ,即可在程序的各个activity中使用了,使用方法示例如下:


1
2
3
4
5
//获取application对象
QQApplication app = (QQApplication)getApplicationContext();
                                                                                                                                                   
//调用方法
app.funcA();


下面再谈一谈使用 Application和 Instance 的区别:


Application对象只能用在activity中,因为 getApplicationContext方法是需要一个Context类型的this指针,一般的java对象不包含这个Context类对象。


整个程序的Application对象只有一个,而Java的单例模式的类可以有很多个,在业务逻辑比较复杂的应用中,全部使用一个Application 类对象来管理全局信息其实并不合适。


Application类本身也属于Context的子类,所以该对象可以向上转型为Context类型,该类可以直接使用Android提供的各种服务,如:getSystemService(Context.CONNECTIVITY_SERVICE);  getSystemService函数需要Context对象才能调用,普通的Java类无法直接使用。


比较建议的使用方法是,如果需要全局类来保存数据,尽量 使用单例模式的 Java类,而Application类对象以用来管理各个全局的单例Java类对象,比如初始化和资源清理,以及传递this指针(Context类对象)给这些Java类来使用系统的服务。



本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1252222,如需转载请自行联系原作者

相关文章
|
20天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
94 0
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
30 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
3月前
|
Android开发 开发者 iOS开发
APP开发后如何上架,上架Android应用市场前要准备什么
移动应用程序(APP)的开发已经成为现代企业和开发者的常见实践。然而,开发一个成功的APP只是第一步,将其上架到应用商店让用户下载和使用是实现其潜力的关键一步。
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
11天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
20天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
10 0
|
20天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
27天前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
17 1