全局获取Context
首先需要实现自定义MyApplication继承Application,然后在AndroidManifest.xml的<Application>
标签下配置MyApplication,这里需要使用全类名。MyApplication中存储了静态的Application级别的Context,使用时直接调用MyApplication.getContext即可。
使用Intent传递一些自定义对象
Serializable方式
直接让实体类实现Serializable接口,然后在Intent的putExtra方法中直接传入即可。然后通过getIntent().getSerilizableExtra取出,取出的Serializable对象向下转型。
Parcelable方式
Parcelable方式的效率更高,首先我们的实体类需要继承Parcelable类,实现describeContents和writeToParcel方法。前者直接返回0即可,后者需要将实体类中的字段一一写出,除此我们还需要提供一个Creator常量,可以实现Parcelable.Creator接口,并制定泛型。重写crateFromParcel和newArray两个方法。在crateFromParcel中需要读取之前写入的字段,然后返回实例。读取的顺序和写入的顺序要相同,newArray中直接传入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.v(tag,msg);
}
}
public static void i (String tag,String msg){
if (level <= INFO){
Log.v(tag,msg);
}
}
public static void w (String tag,String msg){
if (level <= WARN){
Log.v(tag,msg);
}
}
public static void e (String tag,String msg){
if (level <= ERROR){
Log.v(tag,msg);
}
}
}
通过指定level就能实现只打印对应级别以上的日志,指定为NOTHING级别的时候就不会打印。
调试
使用Attach debugger to processor 可以随时将正常运行的程序进入调试模式。
Alarm
通过getSystemService方法可以获取AlarmManager的实例,传入参数Context.ALARM_SERVICE即可,调用manager,第一个参数是一个整型,用于指定AlarmManager的工作类型,第二个参数是任务触发的时间,第三个参数是pendingIntent
Lambda表达式
Lambda表达式即没有方法名,也没有访问修饰符,返回值类型。只要是只有一个待实现方法的接口都可以使用Lambda表达式。如图,用lambda表达式实现接口:
public interface MyListener {
String dosomething(String a, int b);
}
MyListener myListener = (a, b)->{
String result = a + b;
return result;
};