在开发中碰到这么一种需求,每次打开应用时候,需要将应用中某个按钮点击的次数进行统计,上传至服务器。这样就需要保存每次打开应用时候的点击信息。
背景知识,几种变量的生存周期:
(1)类变量,其生存周期和类的生存周期相同,(经历创建->加载->销毁几个阶段);其加载一般发生在第一次创建类的实例或者调用类的方法时候发生。销毁一般在程序运行结束,jvm退出的时候关闭
(2)实例的成员变量,其生存周期和实例对象的生存周期相同(经过创建、初始化、销毁等几个阶段)。其创建一般发生在new该对象时,销毁一般有java自动回收机制完成,当不存在对该对象的引用时,垃圾回收器会考虑将对象回收。
(3)final修饰的变量不可被更改:其初始化的时机,如果是类的静态变量,可以在声明以及静态初始化块中被初始化;如果是成员变量,可以在声明、构造函数中被初始化。
下面是具体的实现思路:
一、通过intent进行传递
通过intent的putExtra方法和getExtra方法可以传递int,boolean,String及可以序列化或者继承了parseable接口的数据。
二、通过类的静态变量进行传递
该方法可以传递任意类型的数据
三,通过全局对象进行传递
全局对象的创建由系统负责,使用全局对象需要一个继承自android.app.Application的类,并在该类中定义任何类型的成员变量和方法。其创建步骤如下:
1,定义一个继承了Application的类
关于全局类的一些说明,可以参照这篇博客:(其实不仅仅用来进行全局参数的传递,对于很多地方公用的函数,也可以在这个类中定义)
http://blog.csdn.net/renguichao/article/details/7667245
利用这个方法,可以传递各种类型的数据:基本类型,对象类型,甚至bitmap等类型。
package com.bobo.activity; import android.app.Application; public class MyApplication extends Application { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } }
2,在配置文件中配置该类
<application android:name="com.bobo.activity.MyApplication" android:allowBackup="true"
3,之后可以在程序的任何地方通过如下方法获取MyAPp类的对象
//1,利用全局对象 MyApplication myApp=(MyApplication)getApplicationContext();
四、通过剪贴板进行传递
高版本的剪贴板可以传递intent能够传递的数据类型。
但对于低版本,可以将任何对象(包括像bitmap这样的)类型进行base64编码转换为字符串后进行传递。
可见,对于需要将对象转换为字符串进行保存或者传递的场合,base64编码具有广泛的适用意义。
// 这里的object在具体使用的时候,需要替换为对应的类型 public String Object2Base64Str(Object ob) { String str = null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(ob); str = Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT); bos.close(); oos.close(); } catch (Exception e) { e.printStackTrace(); } return str; } public Object Base64StrToObject(String str) { Object ob = new Object(); // 将字符串进行对象的解码 byte[] bytes = Base64.decode(str, Base64.DEFAULT); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois; try { ois = new ObjectInputStream(bis); ob = ois.readObject(); bis.close(); ois.close(); return ob; } catch (Exception e) { e.printStackTrace(); return null; } }
五、通过sp文件。
在获得该数据的地方对数据进行保存,需要的场合从sp文件中取出,文件一般用于数据的长久存储,如果数据仅仅在一次打开应用的过程中用到,一般不使用这种方法。
六、通过数据库
同sp文件