Android应该掌握的高级技巧

本文介绍Android开发中全局Context管理、使用Intent传递对象以及定制日志工具的技巧。包括如何创建自定义Application类以管理全局状态,通过Serializable和Parcelable实现对象传递,以及灵活控制日志打印以适应不同开发阶段。

一、全局获取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,

这样问题就会迎刃而解了!!!

今天就整理这么多,以后在遇到好的技巧,再补充,欢迎各位留言补充,一起努力!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值