SWBlog icon indicating copy to clipboard operation
SWBlog copied to clipboard

2016.10(drawable, android初学, 生命周期,任务与返回栈, IPC)

Open yunshuipiao opened this issue 5 years ago • 0 comments

笔者自16年毕业至如今,开发 ios 三个月,Android 七个月。自觉学习的知识严重不足,但偶尔记点开发的心得。因此打算整理一下这些笔记,月为单位,特此记录。

2016.7 -- 2016.9 ios开发时期三个月,暂且不表。

###2017.10 开始熟悉项目源码,几个学习的关键点:handlegradle, 匿名内部类和泛型, adapterLayoutinflater.inflate 其中项目用到的Kvo绑定是借鉴ios的一套框架,可以使用 databinding 加以替换。

反射机制, AppBarLayout

关于Android Drawable的微技巧阅读 几个要点:

  1. drawable文件夹存放图片文件,.png, .jpg. .9.png, selectorxml文件,而mipmap只用来存放应用程序的图标。
  2. 根据经验,公司的设计不可能每个尺度的图都能给到。图片最佳的放置文件夹是drawable-xxhdip
//判断2的幂次方
if ((n & -n) == n) // ture

后面阅读了stormzhang的博客,Android学习之路 里面涉及到的书籍推荐,第一行代码,疯狂Android讲义, Thinking In Java中文版,Effective java中文版,我也七七八八看过。此外,还涉及到android基础的文章推荐,Android activity生命周期, 四大组件的基本介绍,Intent, 屏幕适配。中级知识:viewGson, 布局优化(inculde重用,mergeviewstub), 异步消息处理。 进阶知识:gradle, 性能优化,以及兼容库,必备的开源库等,非常值得一看。

awesome-android-tips:常用的android代码。

有关生命周期:

onresumeactivity获得用户焦点,在与用户交互。 onstartactivity用户可见,包括有一个activtity或者view在其上面,但没有完全覆盖,用户可以看到但不能与其交互。

参考文章:Android任务和返回栈 有关任务栈:涉及到几种启动模式: 任务是一个antivity的集合, 使用栈来管理其中的activity, 也被成为返回栈(back task)。 当任务处于后台,返回栈中的所有activity都会进入停止状态。

默认的任务和activity的行为

  • activity A 启动 B时,A进入停止状态,系统保留相关信息(滚动位置,文本框输入内容等)。如果用户在B中按下back, A重新回到运行状态。
  • 当用户按Home, 该任进入后台,返回栈中所有activity进入停止状态而且状态被保留。重新打开时将后台任务直接到前台, 恢复最顶端activity
  • 当用户按下back, 最顶端的Activity从返回栈移除并被销毁,前面的activity处于栈顶并活动。
  • 每个activity都可以被实例化很多次,即使在不用的任务中。

通过在manifest文件设置元素的属性,或者在启动activity是配置Intent的flag来实现。 注意以下几个intentflag

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

定义启动模式(两种方式):

使用manifest文件:launchMode属性来制定

standard:默认启动,每次启动创建实例,并放入当前任务栈。

singleTop:若将启动act在当前任务栈中存在且处于栈顶, 不会创建实例,而是调用栈顶actonNewIntent()方法。这种方式启动的act可被实例化多次,一个任务也可包含多个实例

singleTask:系统创建一个新的任务,并将此act放入新任务栈底。如果现有任务已存在该act的实例, 系统不会再创建,而是直接调用onNewIntent()。此模式在同一任务中只会存在一个实例。(此模式的启动act都是指其他程序的act, 才会创建新任务)

singleInstance:与singleTask类似,但不会向act所在的任务中再添加其他act

使用Intent flags 在startActivity时,为intent加入flag来改变act与任务的关联方式。 FLAG_ACTIVITY_NEW_TASK:新启动act被放入新任务(启动其他程序),模拟launcherFLAG_ACTIVITY_CLEAR_TOP:若将启动act已存在,不会再创建,而是关闭此act之上的所有actFLAG_ACTIVITY_SINGLE_TOP:与singletop的效果一样。

android的IPC:进程间通信,通过Bindersocket实现。

实现SerializablePracalable来持久化数据,完成对象的序列化,后者安卓主推,但是将对象序列化到存储设备或者对像序列化后通过网络传输稍显麻烦,所以选择使用。

yunshuipiao avatar Apr 27 '19 14:04 yunshuipiao