android中使用Application
在android开发过程中,我们可能存储一些全局的变量,最好在正在app的任何一个activity或者service中都可以访问到,这时我们可以使用application。
我们的一个应用就叫application,那么应该很好理解一个应用里面只会存在一个单例的application,也不难想到用这个在存储全局变量,那么到底是怎么存储呢?
首先,我们创建一个Application,继承android.app.Application:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<span style= "font-size:18px;" > package com.podongfeng.firstapplication.app; import android.app.Application; public class MyApplication extends Application { private Integer allViewInteger; public Integer getAllViewInteger() { return allViewInteger; } public void setAllViewInteger(Integer allViewInteger) { this .allViewInteger = allViewInteger; } } </span> |
然后,在AndroidManifest.xml去声明这个Application,有点类似于声明Activity。
其实,在AndroidManifest.xml中肯定会存在一个系统声明的Application,类似于这样:
1
2
3
4
5
6
7
8
9
10
11
|
<span style= "font-size:18px;" > <intent-filter> <category android:name= "android.intent.category.LAUNCHER" > </category></action></intent-filter> </activity> </activity> </application></span> |
那么,怎么替换成为我们自己的application呢?
其实,只要在application标签中增加android:name属性指向我们自定义的application就可以了:
1
2
3
4
5
6
7
8
9
10
11
|
<span style= "font-size:18px;" > <intent-filter> <category android:name= "android.intent.category.LAUNCHER" > </category></action></intent-filter> </activity> </activity> </application></span> |
OK,这样的话,我们就可以在activity中使用getApplicationContext()来获取这个我们自定义的Application了。
等等,是不是局的这样还不是特别的方便,如果写了一些共用的java方法,为了代码的良好复用,没有放在activity里面呢?
通过一个参数把context传过去,然后再用context去获取Application?
这样做当然可以,不过,既然Application是单例的,我们很容联想到在单例的设计模式中使用getInstance方法来得到单例的对象。事实上,我们的MyApplication集成了Application,可以直接覆写onCreate方法,在Application被创建时把对象赋值给一个静态成员变量,这样,就可以任何地方通过MyApplication的静态方法去获取这个单例了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<span style= "font-size:18px;" > package com.podongfeng.firstapplication.app; import android.app.Application; public class MyApplication extends Application { private static MyApplication myApplication = null ; public static MyApplication getMyApplication() { return myApplication; } private Integer allViewInteger; public Integer getAllViewInteger() { return allViewInteger; } public void setAllViewInteger(Integer allViewInteger) { this .allViewInteger = allViewInteger; } @Override public void onCreate() { super .onCreate(); myApplication = this ; } } </span> |
OK,我们目前只在里面写了一个可用的全局变量allViewInteger,这仅仅用来说明问题就足够了,想存什么就存什么,获取起来也很方便,最后附上在2个activity中set和get的一个全局变量的样例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<span style= "font-size:18px;" > package com.podongfeng.firstapplication; import com.podongfeng.firstapplication.app.MyApplication; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button nextBtn; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyApplication myApplication = MyApplication.getMyApplication(); myApplication.setAllViewInteger( 100 ); nextBtn = (Button) findViewById(R.id.btn_next); nextBtn.setOnClickListener( this ); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true ; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true ; } return super .onOptionsItemSelected(item); } @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getApplicationContext(), SecActivity. class ); startActivity(intent); } } </span> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<span style= "font-size:18px;" > package com.podongfeng.firstapplication; import com.podongfeng.firstapplication.app.MyApplication; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class SecActivity extends Activity { private TextView textView = null ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activiry_sec); textView = (TextView) findViewById(R.id.tv_sec); textView.setText(String.valueOf(MyApplication.getMyApplication().getAllViewInteger())); } } </span> |
结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com
android中使用Application的更多相关文章
- Android(java)学习笔记120:Android中的Application类用法
1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ...
- Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法
今天在手机上调试运行Andorid项目时,发现Console打印出"WARNING: Application does not specify an API level requiremen ...
- Android(java)学习笔记61:Android中的 Application类用法
1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...
- Android中的Application类在应用程序中的应用
Application类 每次应用程序运行时,应用程序的Application类都保持实例化状态(都会持有该Application实例).与Activity不同的是,配置改变并不会导致应用程序重启.在 ...
- [Android Pro] Android中全局Application的onCreate多次调用问题
一般来说Application的onCreate方法只会执行一次, 如果应用中采用多进程方式,oncreate方法会执行多次,根据不同的进程名字进行不同的初始化, 就是在application中多添加 ...
- Android中全局Application的onCreate多次调用问题
String processName = OsUtils.getProcessName(this, android.os.Process.myPid()); if (processName != nu ...
- Android中Application的应用
当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Appli ...
- [转]Android中Application类的用法
原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...
- 【转】Android中Application类用法
转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...
随机推荐
- js五种不同的遍历 (filter, map,foreach,every, some,)
var arr=[1,2,"a",2,4,1,4,"a",5,6,7,8,"aa","bb","c" ...
- kafka使用问题解决
java.lang.UnsupportedClassVersionError:org/apach/kafka/comon/utils/Utils:Unsupport major.minor versi ...
- [转帖]APT34攻击全本分析
APT34攻击全本分析 https://zhuanlan.kanxue.com/article-8401.htm 高手太多 我等菜鸟目不暇接.. 一.事件综述 2019年4月18日,黑客/黑客组织使用 ...
- [2019沈阳网络赛D题]Dawn-K's water(点分治)
题目链接 题意为求出树上任意点对的距离对3取余的和. 比赛上听到题意就知道是点分治了,但是越写越不对劲,交之前就觉得会T,果不其然T了.修修改改结果队友写了发dp直接就过了Orz. 赛后想了想维护的东 ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
- Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式
Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式 解决: xlwt 中设置单元格样式主要 ...
- SSM框架中数据库无法连接的问题
首先是SSM框架中所有的配置都是没有问题的,而且项目在其他人的环境上也能正常访问数据库:那么最有可能的就是数据库版本的问题导致数据库连接不上,服务器给我的报错是: 15:37:25.902 [C3P0 ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- vuex辅助函数和vuex5个属性
在上篇中,我们可以知道如果想要访问vuex.store中state中的数据,需要this.$store.state.属性名.显然这样访问数据写的代码很很不简洁的,辅助函数就是用来解决这个问题的. 1. ...
- k3 cloud的单据存储在业务对象表中
k3 cloud的单据存储在业务对象表中,表名为T_META_OBJECTTYPE,查询表名和对应的表: select FNAME,FBASEOBJECTID from T_META_OBJECTTY ...