##准备开始前
A: 先上图以给大家最直接的体验:
实现的功能类别图例:
图例1:
图例2:
B: 挑选了两个项目截图说明:
一个UI布局项目,图2(随意找的几个图片加载的):
天气预报小项目:图3
##资料下载:
- 《第一行代码 2》书籍下载
http://download.csdn.net/download/u013472738/10007552
-
第一行代码(第二版)源码与目录 :
-
个人学习代码注释说明 +apk
http://download.csdn.net/download/u013472738/10006972
- 2018年9月最新
https://download.csdn.net/download/u013472738/11656408 (含有apk)
https://download.csdn.net/download/u013472738/11656496 (不含apk)
阅读安排:
第一弹:
读书计划时间:6天;开始于:8.17 号;
8.17号学习:
- 隐式意图:Intent
和显示意图的功能使用功能类似:都可传递参数和相应事件。
但是 隐式意图的配置不是在代码中配置的;主要是在清单文件(Mainfest)中配置的,(可以通过一个活动(Activity)启动另一个活动(Activity))
例如步骤:ActivityA 向 ActivityB中相应事件:
A: 在 ActivityB 的清单文件(Mainfest)配置中添加过滤配置:如:
<intent-filter>
<action android:name="apps.tj.my.androidbook2test.TJTest_Intent" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.TJTest_Intent" />
</intent-filter>
B: 在ActivityA 需要相应的地方,也就是传递信息的地方:即可。如下
Intent ist = new Intent("apps.tj.my.androidbook2test.TJTest_Intent") ;
// its.addCategory("android.TJTest_Intent");//TJ:可以添加多个 相应意图
startActivity(ist);
说明:
过滤器(Intent-filter) 中的:<cation android:name= “xxx.text.xxx”/>
里面的:“xxx.text.xxx”;表示和隐式意图的绑定的数据,
标签:category 说明是自己定义的一个相应配置。
备注:隐式意图中Intent中的 参数可以有多个相应;
使用标签:category
- 活动(Activity)的四种启动模式:
详情参考查看:
http://blog.csdn.net/shinay/article/details/7898492/
standard:
默认的启动模式,可以不用在Mainfest文件中配置;
特点是:每次响应活动ActivityB都会重新创建一个新的实例;所以如果多次相应该实例;就会在堆栈中多次含有多个该实例。
例如:ActivityA上面一个按钮 相应跳转ActivityB;当我多次点击这个按钮时;就会启动多个ActivityB 叠加在一起。
singleTop:
特点是:不同于standard模式;该模式下如果活动ActivityB处在栈顶(后进先出的原则)则多次相应ActivityB的时候;只创建一个该ActivityB实例。
例如:ActivityA上面一个按钮 相应跳转ActivityB;当我多次点击这个按钮时;程序会判断当前ActivityB是否处在栈顶;如果是 那么就不再创建新的实例;反之如:ActivityA点击跳转到ActivityB,点击ActivityB中按钮跳转到ActivityC(这个时候ActivityC处在栈顶),再次点击ActivityC中的按钮跳转到ActivityB (这个时候ActivityB不在栈顶,ActivityC在栈顶)则创建另一个新的实例ActivityB。
singTask:
特点是:比singleTop 模式又进一步人性化;如果当前实例在同一个栈中;就不在创建。
例如:ActivityA点击按钮跳转到ActivityB:这个时候多次点击ActivityA中的按钮都不会再新建一个ActivityB的实例;因为ActivityB已经在栈中存在。
同样的:如果ActivityA点击按钮跳转到ActivityB 、ActivityB点击按钮跳转到ActivityC、ActivityC点击按钮跳转到ActivityB;这个逻辑中最后也跳转到ActivityB的时候也不会重新新建一个实例;因为 ActivityB已经在栈中。
所以 只要活动在栈中就不会在后面的再次调用中重新创建一个实例了。
singleInstance:
不同于上面的三种模式的本质是:上面的三种默认都是在同一个栈中操作的; 而singleInstance模式是新建了一个栈进行操作的,并且只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
特点是:上面的三种默认都是在同一个栈中操作的; 而singleInstance模式是新建了一个栈进行操作的。
例如:ActivityA和ActivityC是上面三种模式的任一种,而ActivityB是singleInstance模式,如果ActivityA点击按钮跳转到ActivityB(新建自己的唯一栈和唯一实例),然后ActivityB点击按钮跳转到ActivityC(这个时候ActivityA和ActivityC处在同一栈中);
那么这个时候在ActivityC中点击返回、首先返回的同一栈的ActivityA、再点击返回才会返回到ActivityB。这个是最简单的一种操作方式,在这个模式中还主要涉及到另外其他的活动都打开ActivityB 这个操作会复杂些。
在Mainfest.xml的活动汇总配置方式例如:
android:launchMode="standard"
- 在Android开发过程中 文本的大小一般使用像素单位是:sp(更完美的适配各种屏幕大小)。
- Activity父类管理器:BaseActivity
开发项目中为了更好的管理活动(Activity) 比较方便的做法是 让活动都继承一个父类的活动(BaseActivity);如果方便更好的处理全部的活动的退出,那么就需要一个活动的管理器(ActivityCollectors.java)便于程序在任何想要退出的地方都能退出。
第二弹:
Ok-----------8.17号学习完。
第一弹大致看到160页
也是看完了150页的量;考虑到 时间问题(学习到凌晨6点…)下一学习计划有代码调试测试:
- RecyclerView 测试(完美替代ListView)
- fragment碎片化测试。(当下测试到第160 ;后面的新闻客服端 稍后要测试,巩固)外加需要新学习:50页;到210页以上。
- 广播:
A:系统广播:全局广播(所有的应用都能接收到)
动态注册:只能在程序打开后才能访问激活,能在代码中关闭。
静态注册:最大区别是程序不用打开就能接收到:比如开机自启动功能。
B:自定义广播:可以是全局广播(其他三方程序也能访问)
特点:自己可以动态或者静态注册广播 ;想怎么定义就怎么定义。灵活。
C:本地广播:只能使用在当前项目中。
特点:最大不同就是只能在该项目中使用;其他三方程序不能访问到。
- onResume():
onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。
这也解释了 为什么 章节:5.5强制下线为什么是在父类的:onResume()方法中接受广播;因为这个时候的活动是处在栈顶的(也就是用户看到的界面和能操作的界面。)
- SharePreferences存储:可以很好并且简易的存储 数组数据集合内容。
说明:Git暂时还是使用的可视化的SmartGit操作上传和管理代码。
###第三弹:
Ok-----------8.18号学习完。
第二弹大致看到211页完成计划。下一个学习计划: 80 页。
8.19号学习…
- 数据库 :LitePal 库:这个到后面会整理一份到CSDN上面。
- ContentPrivate 跨进程(项目)共享数据:项目一就是当前的项目;项目二是同一级目录下的:TestContentPrivates项目。 完美测试+注解 。
###第四弹:
Ok-----------8.19号学习完。
第三弹大致看到291页完成计划。下一个学习计划: 80 页。
- 工作时间部分。
- 抽出下班后时间 学习部分内容。
说明: 工作项目维护,优化项目内容。
###第五弹:
Ok-----------8.20号学习完。
第四弹大致看到371页完成计划,下一个学习计划:30页。
学习前要求:
- 完成“下载示例”小项目;(从:P366 页开始了。)
###第六弹
Ok-----------8.21号学习完。
第五弹大致看到408页完成计划。
调整时间:-------不计在计划内天数。
原因是:到SS2-EAST 团建去了。
下一个学习计划:看完第12章节;(代码适当)大概50页。
学习内容:
-
完成“下载示例”小项目;(从:P366 页开始了。)但是运行有bug;解决。
-
圆形图片优化库: circleimageview :
https://github.com/hdodenhof/CircleImageView -
完美完成第12章节全部内容;很不错的界面效果。
-
runOnUiThread 的用处和 Handler的区别。
-
天气项目中可以使用必应的每日一图作为背景;(考虑)
-
学习完了第14章内容;并写完了代码;只是代码有点瑕疵…要调试看看。
###第七弹
最后一弹:最后一章学习。 -
优化上一弹的问题;
-
理解窗口:android:fitsSystemWindows=“true”
-
解决背景和状态栏没有融合到一起:SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
参考:
http://blog.csdn.net/stevenhu_223/article/details/12428591 -
安全起见:在Release版本中明文签名信息最好配置在:根目录下的:gradle.properties中。
本书阅读完。 意犹未尽啊。
终于有时间简单整理了一下个人的学习路线了;
值得高兴的是:《Android源码 设计模式》一书阅读也接近尾声了…
此文章只为记录个人曾经的学习路线,或者对 作为读者的你 的参考意义不大;
但是 个人感觉:学习 是我们每个人应该坚持的。坚持学习;拥有成长。