0%

Activity全局对象传递数据

Activity全局对象传送数据

其实这个全局对象呢,我感觉这个名字听得总是怪怪的,确实没有Windows气的名字好听说实话的,在Windows下也称这个东西叫做实例对象,就是在winmain函数传递过来的那个instance,这里的话呢也是,这里也需要说一下这个安卓程序的一个入口点

安卓程序的入口点

安卓程序的入口点其实和MFC基本上是大同小异,学多了我感觉这两个没啥太大的区别,同样的MFC是有一个全局的APP变量,由于是一启动就初始化,所以在它里面写东西,就有点像初始化,在安卓中呢,是一个类继承了Application这个类,例如下面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.lx;

import android.app.Application;

public class AppcationTest extends Application{
private String Name;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
}

继承了Application,然后重写onCreate函数,这个函数应该是必须要的吧,然后在我们的Manifest中定义我们的实例对象:

1
android:name=".AppcationTest"

这个样子我们就进行了定义,上面配置就是说我们的入口类是哪个(我那个单词拼写错了,我也就没改)
改完之后我们就可以在传输断这么写:

  1. 输入端:
1
2
AppcationTest app = (AppcationTest)getApplication();
app.setName("Test");
  1. 在接收端这么写:
1
2
AppcationTest app = (AppcationTest)getApplication();
Log.d("ooo", app.getName());

这个样子我们就进行了数据传递。

程序的优化

我们可以观察到,我们有一个getApplication这个么一个方法,其实在MFC中这个函数是全局的(类似于AfxXXX),但是这个地方这个方法是来自于Activity这个类的,所以我们要想获得的话呢必须要继承Activity这个,这就很麻烦了,所以我们想到了可以使用静态的一个方法,具体实现方法如下:

  1. 全局对象
1
2
3
4
public static AppcationTest instance = new AppcationTest();
public static AppcationTest getInstance() {
return instance;
}
  1. 输入端:
1
2
AppcationTest app = AppcationTest.getInstance();
app.setName("Test");
  1. 接收端:
1
2
AppcationTest app = AppcationTest.getInstance();
Log.d("ooo", app.getName());

这个样子我们就能很方便的进行数据的传输了。

但是我们发现当我们的程序十分的大的时候我们的数据变量会是非常的多,因为我们的全局对象会有很多的变量,所以我们在这个时候我们就会想到Map集合,这个东西我也是刚了解没多久(我也是学习java没多久的时间)

具体如何实现呢?看下面示例代码:

  1. 全局对象:
1
2
3
4
5
private HashMap<String, Object> map = new HashMap<String,Object>();

public HashMap<String, Object> getMap() {
return map;
}
  1. 输入端:
1
2
3
AppcationTest app = AppcationTest.getInstance();
app.getMap().put("Name", "Wker");
app.getMap().put("Age", 19);
  1. 接收端:
1
2
3
AppcationTest app = AppcationTest.getInstance();
Log.d("ooo", (String) app.getMap().get("Name"));
Log.d("ooo", (Integer) app.getMap().get("Age")+"");

这个样子我们的代码就优化完毕了。