入门Android开发--第一行代码--笔记系列(九)
来源:互联网 发布:python csv文件 求和 编辑:程序博客网 时间:2024/05/21 19:36
其他高级技巧
全局获取Context
除了传参,
可以定制一个自己的Application类
public class MyApplication extends Application {private static Context context;@Overridepublic void onCreate() { context=getApplicationContext();//这里没写super}public static Context getContext(){ return context;}}
然后需要将配置文件里的application改成我们定制的MyApplication
这样随时都可以获取context了
(可能是我目前没碰到,感觉getApplicationContext()随时都可以获取啊,不需要这么实现)
使用Intent传递对象
想较而言,Serializeble虽然使用简单,但是会把整个对象序列化,效率较低,所以还是推荐用Parcelable实现Intent传递对象。
Serializeble
Serializeble是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上传输,也可以存储到本地。
序列化的使用:
public class Person implements Serializable { private String name; private int age; .... }//然后再activity中实例化后传递即可Person person=new Person();prson.setName("A"); person.setAge(2);Intent intent=new Intent(Main.this,New.class);intent.putExtra("person",person);startActivity(intent);//在New.class中获取Person person =(Person)getIntent().getSerializableExtra("person");
Parcelable
Parcelable的实现原理是将一个完整的对象进行分解,分解成Intent支持的多个数据部分
public class Person implements Parcelable {private String name;private int age;@Overridepublic int describeContents() { return 0;}@Overridepublic 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]; }};}//获取方法类似Person person=(Person)getIntent().getParcelabelExtra("person");
定制自己的日志工具
日志工具虽然很好用,但是项目大了之后,log不仅会降低程序效率还有可能泄露一些信息。但是又不能直接删除。不可能一行行删。也不会写完一个功能删一次吧。
所以就需要定制一个调试可用,上线屏蔽的日志工具。
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 NOTING=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.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); }}}
真心觉得好厉害啊。。雅蠛蝶,都怎么想出来的。
调试android程序
= = 这个不应该最早说吗。。。
编写测试用例
这个也是我这个外行人听起来一直觉得很高端的地方。两眼冒光啊,写个代码已经很了不起了,还写个测试代码的代码。艾玛
测试用例主要防止修改代码附带引起的预期之外的事故发生。
创建测试工程
AdroidStudio里在创建工程的时候,会自动创建一个AndroidTest工程,在里面创建一个测试类,注意继承测试父类,比如AndroidTestCase
public class TestClass extends AndroidTestCase{//会在所有测试用例执行之前调用@Overrideprotected void setUp() throws Exception { super.setUp();}//定义一个test开头的方法,测试框架会自动调用这个方法public void testAddActivity(){ assertEquals(0,ActivityCollectorUtil.activities.size());//断言activity数量为零 MainActivity mainActivity=new MainActivity(); ActivityCollectorUtil.addActivity(mainActivity);//手动添加,new的时候没有添加吗? assertEquals(1,ActivityCollectorUtil.activities.size());//再断言数量为1}//会在所有测试用例执行之后调用@Overrideprotected void tearDown() throws Exception { super.tearDown();}}
像运行程序一样,运行这个测试用例,会发现成功。
但是如果你再添加一次,mainActivity,你是希望数量依旧为1的,可是这里会变成2。于是你发现需要修改ActivityCollectorUtil.addActivity里的代码。
就这样不断测试,不断修改,代码就会更加健壮。
好吧。。测试用例好像也没啥神秘的。
- 入门Android开发--第一行代码--笔记系列(九)
- 入门Android开发--第一行代码--笔记系列(Activity)
- 入门Android开发--第一行代码--笔记系列(Intent)
- 入门Android开发--第一行代码--笔记系列(问)
- 入门Android开发--第一行代码--笔记系列(五)
- 入门Android开发--第一行代码--笔记系列(广播)
- 入门Android开发--第一行代码--笔记系列(Fragment)
- 入门Android开发--第一行代码--笔记系列(SQLite)
- 入门Android开发--第一行代码--笔记系列(六)
- 入门Android开发--第一行代码--笔记系列(Service)
- 入门Android开发--第一行代码--笔记系列(八)
- 入门Android开发--第一行代码--笔记系列(结束)
- 入门Android开发--第一行代码--笔记系列(存储读取Internal文件)
- 《第一行代码-Android》学习笔记(九)
- 第一行代码Android学习(九)
- 《第一行代码》学习笔记--Android入门(五、六)
- Android 开发入门之《第一行代码》(1)
- Android第一行代码学习笔记九----高级技巧
- 教你App如何上架应用宝----腾讯开放开发平台
- mysql中左连接,右连接,内连接查询,以及与where之间关系
- 从单调栈到计算1的矩阵
- 深入解析Android关机
- 网页常用js
- 入门Android开发--第一行代码--笔记系列(九)
- 如何获取到文件的创建时间,修改时间等参数
- 数据结构之二叉树的先序、中序、后续的求法
- 关于Fiddler 抓包Genymotion 设置
- mybatis动态sql以及reslutType和resultMap详解
- 有关指针,数组和函数的一些联系
- 算法竞赛入门经典(1,2章的python实现)
- 基于HCE的NFC移动支付及云HCE
- BFS/DFS算法介绍与实现