Android中关于Application类的粗略见解
来源:互联网 发布:淘宝绫致时装官方店 编辑:程序博客网 时间:2024/06/03 19:44
Application和Activity、Service、BroadcastReceiver一样,是Android系统框架的一个系统组件,当Android程序启动时会自动创建一个Application对象,用来存储系统的一些信息。这个Application对象只会创建一个,所以Application可以认为是单利模式(singleton)的一个类。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并指向自己的 Application的名字即可)。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。
应用场景:
在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放
以下是相关代码:
1、首先是定义一个类继承Application
public class UserApplication extends Application { private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public void onCreate() { super.onCreate(); setUserName("noUserName"); }}
注意:继承Application类主要重写里面的onCreate()方法,使Application在创建的时候初始化变量的值,此方法才是真正的Android程序的入口。
2、创建完自定义的Application后,我们要在AndroidManifest.xml中的application中声明
<application android:name = "UserApplication"></application>
3、声明后,就可以在Activity中使用,只需要调用Context的 getApplicationContext或者Activity的getApplication方法来获得一个Application对象,然后再得到相应的成员变量即可。它是代表我们的应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。
MainActivity:
public class MainActivity extends Activity { UserApplication app; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// app = (UserApplication ) getApplication(); app = (UserApplication ) getApplicationContext(); Intent i = new Intent(MainActivity.this,Activity2.class); app.setUserName("wang"); System.out.println(app.getUserName()); startActivityForResult(i,1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); System.out.println(app.getUserName()); }}
Activity2:
public class Activity2 extends Activity { UserApplication app; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity2); app = (UserApplication ) getApplication(); System.out.println(app.getUserName()); app.setUserName("wu"); setResult(1,new Intent()); finish(); }}
输出结果:
wangwangwu
- Android中关于Application类的粗略见解
- Android 中关于SimpleAdapter的一些见解
- 关于Android的application类
- android中关于application的一些东西
- 关于Thread类中run()方法的一些见解
- 算法粗略见解
- 关于android的Application
- 关于java中if语句的见解
- 关于Unity中LightMap的一些见解
- android中application 关于全局变量
- android中application 关于全局变量
- android中application 关于全局变量
- android中application 关于全局变量
- SparkSubmit 提交作业源码流程粗略概述(含application中 driver、client、 executor的创建)
- 关于Android Application类的一些认识
- Android Activity中Intent的一些见解
- 关于公共类Util的一些见解
- 关于ERP的见解
- svn检出maven项目的步骤
- 视音频数据处理入门:RGB、YUV像素数据处理
- 如何删除电脑中使用过的COM端口
- leetcode:Palindrome Number [9]
- Lightoj 1068 数位dp
- Android中关于Application类的粗略见解
- SGU 114 Telecasting station(二分)
- hdu 5806 二分
- Scala implicits编程彻底实战及Spark源码鉴赏
- JavaScript 方向键值的获取
- leetcode:Regular Expression Matching [10]
- github release 功能的使用及问题解决
- 从Unix 到 Linux
- 发奖金----搜狐2016研发工程师编程题