文章目录
  1. 1. 1.使用Intent传递对象
    1. 1.1. Serializable序列化
    2. 1.2. Parcelable方式
  2. 2. 2.自定制日志工具
  3. 3. 3.TDD在Android开发中应用

1.使用Intent传递对象

典型的使用putExtra()以键值对的形式将数据放入Intent对象中

1
2
intent.putExtra("string_data", "hello");
intent.putExtra("int_data", 100);

在用相应的getXXXExtra()方法将数据取出

1
2
getIntent().getStringExtra("string_data");
getIntent().getIntExtra("int_data", 0);

但是getXXXExtra()方法中所支持的数据类型是有限的,比如自定义的对象存储在Intent就无法通过getXXXExtra()方法取出。这个时候就可以使用Serializable或Parcelable方式

Serializable序列化

在自定义的类中通过继承Serializable接口就可以将需要序列化的类,进行序列化,对这个类中不需要序列化的成员变量可以使用transient关键字对其进行声明。比如我们将自定义的实现了Serializable接口的类person对象存入Intent中

1
intent.putExtra("person_data", person);

取出的对象的时候就可以使用如下语句

1
Person person = (Person) getIntent().getSerializableExtra("person_data");

Parcelable方式

Parcelable 方式的实现方式与Serializable方式不同,它是通过将一个完整的对象分解成Intent支持的数据类型。
首先让自定义的类实现Parcelale接口,接着复写其中的describeContents()和writeToParcel()两个方法。在其中writeToParcel()方法中调用Parcel
对象的writeXxx()方法将自定义类中的成员变量一一写入。
最后,新建一个public static final Parcelable.Creator<自定义类> CREATOR常量,实现Parcelable.Creator<自定义类>接口,并将泛型制动成自定义的类,接着复写createFromParcel()和newArray()这两个方法,在createFromParcel()方法去读取刚才写出的自定义的类中成员变量
,并利用读取到的成员变量创建一个自定义对象进行返回。注意这里读取的顺序一定要和刚才写出的顺序完全相同。而newArray()方法中的实现就简单多了,只需要new 出一个自定义类数组,并使用方法中传入的size作为数组大小就可以了。

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
public class Person implements Parcelable {
private String name;
private int age;
……

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name); // 写出name
dest.writeInt(age); // 写出age
}

public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.name = source.readString(); // 读取name
person.age = source.readInt(); // 读取age
return person;
}

@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}

相应的取出对象时使用语句

1
Person person = (Person) getIntent().getParcelableExtra("person_data");

2.自定制日志工具

为了在应用上线之后去掉打印日志,或者实现打印自定义级别的日志,如只打印Error级别日志信息,我们可以自定义一个日志类,对日志的信息进行管理。

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
public class LogUtil {
public static final int VERBOSE = 1;
public static final int DEBUG = 2;
public static final int INFO = 3;
public static final int WARN = 4;
public static final int ERROR = 5;
public static final int NOTHING = 6;
public static final int LEVEL = VERBOSE;
public static void v(String tag, String msg) {
if (LEVEL <= VERBOSE) {
Log.v(tag, msg);
}
}
public static void d(String tag, String msg) {
if (LEVEL <= DEBUG) {
Log.d(tag, msg);
}
}
public static void i(String tag, String msg) {
if (LEVEL <= INFO) {
Log.i(tag, msg);
}
}
public static void w(String tag, String msg) {
if (LEVEL <= WARN) {
Log.w(tag, msg);
}
}
public static void e(String tag, String msg) {
if (LEVEL <= ERROR) {
Log.e(tag, msg);
}
}
}

如上所示在LogUtil中可以通过调整Level的大小来自定义的打印的log的基本,Level为1表示打印全部log,为6表示所有级别都不打印,1到6打印的log的重要级别依次上升。

3.TDD在Android开发中应用

创建Android Test Project为相应的项目进行测试,生产的测试项目的AndroidManifest.xml文件中会指出该测试的目标项目,通过继承AndroidTestCase就可以编写测试类,在其中编写各种测试方法,具体的使用方法和java中junit的一样,可以看我github上AgileJavaNote这个项目。

文章目录
  1. 1. 1.使用Intent传递对象
    1. 1.1. Serializable序列化
    2. 1.2. Parcelable方式
  2. 2. 2.自定制日志工具
  3. 3. 3.TDD在Android开发中应用