阅读笔记

319 阅读6分钟

一:Mac上面的Android studio配置adb

1、进入当前用户home目录
	echo $HOME
2、创建.bash_profile文件
	touch .bash_profile
3、打开.bash_profile文件
	open -e .bash_profile
4、配置
	export PATH=${PATH}:/Users/xxx/Library/Android/sdk/tools:~/Library/Android/sdk/platform-tools
5、执行命令
	source .bash_profile

二、安卓手机连上mac,android studio找不到设备,adb devices也找不到设备

1、终端输入:system_profiler SPUSBDataType 
2、创建、修改adb_usb.ini文件
输入: vi ~/.android/adb_usb.ini 命令,在打开的 adb_usb.ini文件中添加Vendor ID: 0x2d95, 然后保存退出

三、adb常用命令

https://github.com/mzlogin/awesome-adb/blob/master/README.md
  adb kill-server
  adb start-server
  adb devices

四、Mac as上常用热键

快速查找类中的属性(file structure):command+b
快速查找类:双shift

五、深拷贝与浅拷贝

浅克隆是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
深克隆不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象

六、Android 系统历程特点

Android 7.0 增加了基于文件系统的加密 ,给每个文件分配一个密钥

七、Android 存储优化

存储就是把特定的数据结构转化成可以被记录和还原的格式,这个数据格式可以是二进制的,也可以是 XMLJSONProtocol Buffer 这 些格式。 

八、存储方案:

(1)SharePreferences:

commit将同步的把数据写入磁盘和内存缓存。
apply会把数据同步写入内存缓存,然后异步保存到磁盘,可能会执行失败,失败不会收到错误回调

(2)Parcelable
Parcelable只会在内存中进行序列化操作,并不会将数据存储到磁盘里。
(3)ContentProvider:
为什么 Android 系统不把 SharedPreferences 设计成跨进程安全的呢?
那是因为Android 系统更希望我们在这个场景选择使用 ContentProvider 作为存储方式。

ContentProvider跨进程传递数据机制:

ContentProvider 在进行跨进程数据传递时,利用了 Android 的 Binder 和匿名共享内存 机制。
就是通过 Binder 传递 CursorWindow 对象内部的匿名共享内存的文件描述符。这样在跨进程传输中,结果数据并不需要跨进程传输,而是在不同进程中通过传输的匿名共享内存文件描述符来操作同一块匿名内存,这样来实现不同进程访问相同数据的目的。

安全性:

当ContentProvider是exported,当支持执行 SQL语句时就需要注意 SQL 注入的问题。
如果传入的参数是一个文件路径,然后返回文件的内容,这个时候也要校验合法性;
ContentProvider 这套方案实现相对比较笨重,适合传输大的数据

(4)文件:
(5)数据库--SQLite
多进程并发(通过文件锁来控制多进程的并发)
多线程并发
SQLite 锁的粒度都是数据库文件级别,并没有实现表级甚至行级的锁。
还有需要说明的是,同一个句柄同一时间只有一个线程在操作

每个页永远只存放一个表或者一组索引的数据,即不可能同一个页存放多个表或索引的数据,表在整个 DB 文件的第一个页就是这棵 B 树的根页。
以上图为例,如果想查询rowID为N+2的数据,首先要从sqlite_master查找出table的root page的位置,然后读取root page、page4这两个页,所以一共会需要3I/O。

两种ORM(对象关系映射,通过面向对象的思想将数据库表与对象映射起来)

GreenDao:

  存取速度快
  支持数据库加密
  轻量级
  激活实体
  支持缓存
  代码自动生成

OrmLite 轻量级

八、adb命令

Build and install: ./gradlew installDebug

1、查看屏幕分辨率:adb shell wm size
2、借助无线连接 pc端和移动端
	将 Android 设备与要运行 adb 的电脑连接到同一个局域网
	设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555
	断开 USB 连接。
	找到设备的 IP 地址(设置」-「关于手机」-「状态信息」-「IP地址)
	adb connect	设备ip
	确认链接状态	adb devices
3、	安装apk
	adb install [-lrtsdg] <path_to_apk>
4、	清除缓存和数据
	adb shell pm clear <packagename>
5、	卸载应用
	adb uninstall com.qihoo360.mobilesafe
6、	查看应用信息
	adb shell dumpsys package <packagename>
7、	查看apk安装路径
	adb shell pm path com.pa.health
8、	电脑上的文件传输到手机
	adb  push   电脑上文件路径   /sdcard/(手机的目录地址)
9、	手机上的文件传输到电脑端
	adb  pull  /sdcard/sr.mp4  电脑上文件目录
10、	输入文本
	adb shell input text hello
11、	查看ip
	adb shell ifconfig | grep Mask

九、TextView设置粗体

这种方法设置的效果独特:
	tv.getPaint().setFakeBoldText(true);
下面几种的效果一样:
  android:textStyle="bold"
  // 方式一
  textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
  // 方式二
  textView.setTypeface(Typeface.DEFAULT_BOLD);

十、Kotlin次级构造函数使用

   class MyButton : AppCompatButton {
      constructor(context: Context) : this(context, null)
      constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, R.attr.buttonStyle)
      constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
   }

可以使用this关键字来调用自己的其他构造器, 可以使用super关键字来调用父类构造器

十一、git cherry-pick使用

git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。
例如,假设有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,
其实也就是对已经存在的commit进行再次提交.

简单用法: git cherry-pick 注意:当执行完 cherry-pick 以后,将会生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名一样;

例如:

$ git checkout v2.0分支
$ git cherry-pick 38361a55      ##这个 38361a55 号码,位于v3.0分支中:

$ git log
commit 38361a55138140827b31b72f8bbfd88b3705d77a
Author: Justin Justin@xxx.com
Date: Sat Dec 10 00:11:44 2016 +0800

  1. 如果顺利,就会正常提交。结果:
Finished one cherry-pick.
On branch v2.0分支
Your branch is ahead of 'origin/old_cc' by 3 commits.
  1. 如果在cherry-pick 的过程中出现了冲突,就跟普通的冲突一样,手工解决:
2.1 $ git status # 看哪些文件出现冲突
both modified: app/models/MainActivity.java
**2.2 $ vim app/models/MainActivity.java # 手动解决它。 **
2.3 $ git add app/models/MainActivity.java
2.4 git commit -c <新的commit号码>
2.5 再次cherry-pick剩余commit
若提示:
error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed
则执行对应操作:
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort

命令集合:

git cherry-pick <commit id>:单独合并一个提交
git cherry-pick -x <commit id>:同上,不同点:保留原提交者信息。
Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
git cherry-pick <start-commit-id>..<end-commit-id>
git cherry-pick <start-commit-id>^..<end-commit-id>
前者表示把<start-commit-id><end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有"^"标志的表示把<start-commit-id><end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,<start-commit-id><end-commit-id>只需要commit-id的前6位即可,并且<start-commit-id>在时间上必须早于<end-commit-id>
注:以上合并,需要手动push代码。