update time :2019-1-28 Author:要你命三千又三千 type:学习笔记
这里提供了一个简单的解决方案
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
//添加静态方法获取Context来使用
public static Context getContext() {
return context;
}
MyApplication.getContext()来获取Context的使用
原理:两种实现方式
Serializable方式
对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 ,那反序列化就是从二进制流(序列)转化为对象的过程.
Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现 Serializable 这个接口就可以了
Serializable是Java为我们提供的一个标准化的序列化接口
整个流程
步骤一
序列化对象
public class Person implements Serializable {
private String name;
private int age;
public String getName(){
return name;
}
public void setName(){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(){
this.age=age;
}
}
步骤二:实现对象传输
Person person = new Person();
person.setName("Tom");
person.setAge(20);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person_data", person);
startActivity(intent);
步骤三:获取对象
Person person =(Person)getIntent().getSerializableExtra("persondata"
Parcelable是Android为我们提供的序列化的接口,Parcelable相对于Serializable的使用相对复杂一些,但Parcelable的效率相对Serializable也高很多,这一直是Google工程师引以为傲的,有时间的可以看一下Parcelable和Serializable的效率对比 Parcelable vs Serializable
关键字:序列化接口,Google提供
实现原理
Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是 Intent 所支持的数据类型,这样也就实现传递对象的功能了.
步骤一:对Parcelable进行实现
public class Person implements Parcelable{
private String name;
priavate int age;
@Override
public int describeContents(){
return 0;
}
//将对象分解传输
@Override
public void writeToParcel(Parcel dest,int flags){
dest.writeString(name);
dest.writeInt(age);
}
//SDK api谷歌文档的解释:
//必须实现的接口,并作为公共CREATOR字段提供,该字段从Parcel生成
//Parcelable类的实例
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();
person.age=source.readInt();
return person;
}
@Override
public Person[] newArray(int size){
return new Person[size];
}
};
}
问题场景:
你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都
打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。
由于打印打印的地方众多,不可能一个一个删除,如何解决?
如何实现一次性屏蔽所有打印的日志
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.v(TAG,Msg);
发布时
public static final int LEVEL = NOTHING ;
即可屏蔽所有打印的日志信息。