• iOS
    • 在项目中运行Debug Server
    • 根据电脑的IP,修改AppDelegate.m中的jsCodeLocation的host改为电脑的IP
    • 或者使用jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]
  • Android
    • Android 5.0以上机型使用adb reverse tcp:8081 tcp:8081反向代理到Mac上
    • Android 5.0以下选择菜单中Dev Setting > Debug Service host for device选择Mac的IP
    • 使用react-native run-android启动应用
    • 或者启动Debug Server(react-native start)
    • 使用Android Studio进行调试

SD卡的种类

SD卡包括SD、SDHC和SDXC卡,这三种卡的区别在存储容量:SD卡≤2GB,SDHC卡4-32GB,SDXC卡式64-2048GB。
SD卡的版本是向下兼容的,比如支持SDXC卡的相机,也支持SD卡和SDHC卡。
值得注意的是SDXC存储卡由于采用了恶心FAT格式,WinXP SP2或者更低版本系统式无法识别的

存储卡的速度

SD卡上通常会标注速度,有倍速(如300X)或者是+MB/s两种表示方式。1倍速=150KB/s=0.15MB/s(存储算法,不是理论算法),所以300X是45MB/s,600X是90MB/s
如果卡面上只标注倍速或一个数字,那么一般都是读取速度。写入速度影响了拍摄间隔时间、持续连拍张数、视频记录的最高格式,读取速度则会影响回放、传输速度。一般情况存储设备的写入速度都要低于读取速度。
SD卡有速度等级(Class)、高速等级(UHS Class)两个评价等级,可以辅助判断SD卡的速度。

  • Class 6代表了最低写入速度6M/s;Class 10表示最低写入速度10MB/s
  • UHS-Ⅰ Class 1表示最低写入速度是10MB/s;UHS-Ⅰ Class 3表示最低写入速度是30MB/s
    Class 10和UHS-Class 1都表示存储卡的最低写入速度是10MB/s,那么它们又有事吗区别呢?非UHS存储卡的理论最高速度只有25MB/s,而UHS-I存储卡则能达到104MB/s。即使两张卡的写入速度相同,UHS-I存储卡的读取速度通常也会更高一些。

基本环境

  1. Mac OS X
  2. Node.js 4.0
  3. Xcode 6.3以上版本
  4. Android SDK
  5. watchman和flow

安装

1
npm install -g react-native-cli

初始化

1
react-native init AwesomeProject

开发环境配置

  • iOS XCode6.3及以上即可
  • Android
    • 环境变量ANDROID_HOME
    • SDK Manager
      • Android SDK Build-tools version 23.0.1
      • Android 6.0(API 23)
      • Android Support Repository

运行

  • iOS
    在Xcode中打开工程,直接运行即可
  • Android
    ./android/目录下新建local.properties文件
    把SDK的路径保存在其中
1
sdk.dir=.../Android/sdk

执行命令

1
react-native run-android



https://github.com/SeniorZhai/ReactNative_Demo

UIDevice的静态方法currentDevice可以获取到设备信息(UIUserInterfaceIdiom枚举类型),包括PhonePadUnspecifid
其中Phone为手机设备、Pad为平板设备、Unspecifid为未知设备

各类栏的尺寸

状态栏的高度为20PX,NavigationBar为44PX,底栏为49PX

在Fargment中使用

1
2
3
4
5
6
7
<layout>
<date>
<variable
name="user"
type="io.github.seniorzhai.databindingdemo.model.PlainUser" />
</date>
</layout>

在Fragment.java中

1
2
3
4
5
6
7
8
9
onCreateView() {
ItemGridBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_grid, container, false);
PlainUser user = new PlainUser();
user.name.set("SBBBBBBBB");
user.age.set(111);
binding.setUser(user);
binding.getRoot().setBackgroundColor(RandomColor.getColor());
return binding.getRoot();
}

https://github.com/SeniorZhai/DataBindingDemo/blob/master/app/src/main/java/io/github/seniorzhai/databindingdemo/BingdingFragment.java

在GridView中使用

主要的实现代码需要在Adapter的getView方法中实现

1
2
3
4
5
6
7
8
9
10
11
public View getView(int position,View convertView,ViewGroup parent) {
if (convertView == null) {
binding = DataBindingUtil.inflate(inflater,R.layout.item_grid,parent,false);
convertView = binding.getRoot();
convertView.setTag(binding);
} else {
binding = convertView.getTag();
}
binding.setVariable(BR.user,getItem(position));
return converView;
}

https://github.com/SeniorZhai/DataBindingDemo/blob/master/app/src/main/java/io/github/seniorzhai/databindingdemo/MyAdapter.java

在iOS有个概念叫KVO,它提供一致机制,当制定对象的属性被修改时,会发出一条通知。这样每次被观察的对象的属性被修改后,KVO就会自动通知响应的观察者。
Google推出的Data Binding也可以帮我们实现这一点。

Read More