笔者说:笔者写的这系列读书笔记,目的就是为了方便伸手党,不用看书,可以快速知道书中的一些思想,所以,文章中一般不会写太多代码,都是笔者的一些理解,或书中作者代码的描述。没错,我也是个极简主义者,哈哈。(别看东西少,我真没糊弄你们,哈哈)
最后:笔者是个萌新啊,大佬看到错误多多指正,加油
《Android第一行代码》 第十三章 阅读笔记
第一节 全局获取Context的技巧
什么是Context:
翻译过来就是环境的意思。
一个Activity是一个Context对象,一个Service也是一个Context对象。
我的理解:Context我们可以看到它中间的text,其实也是一个内容。就像一个土地公,既代表这块土地,也是这块土地的管理者。
我觉得安卓,比较重要,或者说最直观的理解,就是“分发”这两个字。
1.1快速获得Context的技巧
Android提供了一个Application的类,每当应用程序启动的时候,系统就会自动的将这个类进行初始化,而我们可以定制一个自己的Application类,以便于管理程序一些全局的状态信息,比如全局Context.
public class MyApplication extends Application{
private static Context context;
@Override
public void onCreate(){
context = getApplicationContext();
//在自定义的application中调用LitePal
LitePalApplication.initialize(context);
}
public static Context getContext(){
return context;
}
}
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。
这里直接在application标签下指定即可。(记得写完整包名)。
第二节 Intent传值技巧
Intent传递对象的两种实现方式
Serializable & Parcelable (两种序列化方式,在实体类中实现接口)
Serializable 方式
emm书上传递逻辑太简单,就是new一个实体类然后set值,我这里就跳过了。
我写下接收方法。
//Person就是实体类
Person person = (Person) getIntent().getSerializableExtra("KEY");
Parcelable方式
public class Person implements Parcelable{
private String name;
private int age;
...
@Override
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest,int flags){
dest.writeString(name);
dest.writeInt(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();
person.age = source.readInt();
return person;
}
@Override
public Person[] newArray(int size){
return new Person[size];
}
}
}
接收代码
//Person就是实体类
Person person = (Person) getIntent().getParcelableExtra("KEY");
对比Serializable ,Parcelable的逻辑复杂,但效率更高。
第三节 定制自己的log日志
书上写得没啥意思。。。
一看就会
有需要,可以百度,貌似更快,固定代码。
第四节 调试Android程序
重要的事情说三遍:
Debug 打断点!Debug 打断点!Debug 打断点!
然后按F8代码就会向下执行一行,可以观察数据变化。
第五节 创建定时任务
Timer类
别用这个了,太耗费性能了,扛不住啊。
Alarm类
代码的话,百度一大把,我这读书笔记就不敲了。。。
重点:Android 4.4开始,Alarm任务触发时间不准确(有延迟)
解决:使用AlarmManager的setExact()代替set()。
Doze模式
知道他是一种模式,为了,延长电池使用寿命。
进入这种模式,系统会对CPU、网络、Alarm等活动进行限制,从而达到目的。
第六节Lambda表达式
Lambda表达式本质:匿名方法
要使用,得再build.gradle里面加配置
关键词:箭头函数、极简主义
本问没有描述书中的多窗口模式,因为太晚了,我要猝死了,明天再说吧。。。