一、全局获取Context的技巧------随处都可以获得Context,也就是说全局Context
思想:Android提供了一个Application类,每当程序运行的时候,系统会自动调用这个类进行初始化。而我们可以自己定制一个Application类,
以便于管理程序中的一些全局的状态信息,具体的代码如下:
public class MyApplication extends Application{
private Context context;
@override
//重写父类的onCreate()方法
public void onCreate()
{
//通过调用getApplicationContext()方法来获得一个应用程序级别的Context
context=getApplicationContext();
}
//将获得的context进行返回
public static Context getContext()
{
return context;
}
}
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。这一步只要在
AndroidManifest.xml文件的<application/>标签中进行指定就可以了。
<application android:name="包名.MyApplication",注意一定要加上包名。
这样两步之后无论我们想在什么地方使用Context,直接使用MyApplication.getContext()方法就可以了。
二、使用Intent来传递对象
由于Intent本身能够传递的数据类型有着很大的限制,我们可以通过Serializable和Parcelable的方法来实现传递自定义的对象。
Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网上进行传输,也可以存储在本地。
序列化的方法很简单,只要实现Serializable这个接口就可以。
假设有一个Person类,其中包含了name和age两个字段,将其进行序列化:
public class Person implements Serializable
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age=age;
}
}
接下来使用Intent进行数据的传递:
Person person=new Person();
person.setName("Tom");
person.setAge(22);
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//由于Person实现了序列化接口,所以可以直接传入putExtra的方法
intent.putExtra("person_data",person);
startActivity(intent);
获取这个对象;
Person person=(Person)getIntent().getSerializableExtra("person_data");
三、定制自己的日志工具
原因:当我们在编写一个比较庞大的项目时候,期间为了方便调试,在代码的很多地方都打印了大量的日志文件,当项目完成的时候不可能一行行将这些日志文件删除
,我们可以自由的控制日志文件的打印,当程序处于开发阶段就叫日志打印出来,当程序上线以后就把日志屏蔽掉。
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 v(String tag,String msg)
{
if(LEVEL<=VERBOSE)
{
Log.v(tag,msg);
}
}
public static void e(String tag,String msg)
{
if(LEVEL<=ERROR)
{
Log.e(tag,msg);
}
}
}
这样,当使用时可以使用(打印DEBUG信息,此时的LEVEL应该不大于DEBUG的值)
LogUtil.d("TAG","debug log");
使用了这种方法以后,我们可以在开发阶段将LEVEL指定为VERBOSE,然后在项目正式上线的时候将LEVEL指定为NOTHING,
这样问题就会迎刃而解了!!!
今天就整理这么多,以后在遇到好的技巧,再补充,欢迎各位留言补充,一起努力!!!